Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.db.models import (Model, CharField, DateTimeField,
- SmallIntegerField, ForeignKey,
- PositiveIntegerField, PROTECT)
- from django.contrib.auth.models import User
- # Create your models here.
- class Negotiator(User):
- class Meta:
- proxy = True
- #can't implement these methods right now, Agreement requires this class defined
- def get_associated_agreements(self):
- ...
- def have_failed_agreements(self):
- ...
- class Country(Model):
- #longest:the Separate Customs Territory of Taiwan, Penghu, Kinmen, and Matsu
- name = CharField(max_length=67, blank=False)
- code = CharField(max_length=3, blank=False)
- def __str__(self):
- return f'(Country {self.name})'
- class Company(Model):
- name = CharField(max_length=256, blank=False)
- country = ForeignKey(Country, on_delete=PROTECT)
- def __str__(self):
- return f'(Company {self.name} {self.country})'
- #can't implement these methods right now, Agreement requires this class defined
- def get_associated_agreements(self):
- ...
- def have_failed_agreements(self):
- ...
- class Agreement(Model):
- negotiator = ForeignKey(Negotiator, on_delete=PROTECT) #notify new employee?
- begin = DateTimeField(auto_now_add=True, blank=True)
- end = DateTimeField(blank=False)
- company = ForeignKey(Company, on_delete=PROTECT)
- #assuming values can't exceed 2 billions or take negative values
- income = PositiveIntegerField(blank=False)
- outcome = PositiveIntegerField(blank=False)
- def __str__(self):
- return f'(Agreement {self.negotiator} {self.company})'
- #can't implement these methods right now, Period requires this class defined
- def get_associated_periods(self):
- ...
- def check_for_failed(self):
- ...
- class Period(Model):
- possible_statuses = (
- (1,'New'),
- (2,'Active'),
- (3,'Reconciliation'),
- (4,'Closed')
- )
- agreement = ForeignKey(Agreement, on_delete=PROTECT)
- begin = DateTimeField(auto_now_add=True, blank=True)
- end = DateTimeField(blank=False)
- status = SmallIntegerField(choices=possible_statuses,
- default=1)
- def __str__(self):
- return f'(Period {self.agreement} {self.end})'
- #monkey patching, expecting Model.__set__ to not throw attr exception
- def __get_associated_agreements_neg(self):
- yield from Agreement.objects.filter(negotiator=self)
- def __get_associated_agreements_comp(self):
- yield from Agreement.objects.filter(company=self)
- def __get_associated_periods(self):
- yield from Period.objects.filter(agreement=self)
- Negotiator.get_associated_agreements = __get_associated_agreements_neg
- Company.get_associated_agreements = __get_associated_agreements_comp
- Agreement.get_associated_periods = __get_associated_periods
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement