i have 2 models, company , contract. each contract between 2 companies. now, seems there manytomany relationship between company , contract, e.g. company can have many contracts , contract between more 1 company. correct? if yes, how specify in django? through 2 foreign keys in 1 model?
class company(models.model): company_name = models.charfield(max_length = 30) address = models.charfield(max_length = 100) website = models.charfield(max_length = 30) email = models.emailfield(max_length = 30) class contract(models.model): company_1 = models.foreignkey(company, related_name="%(app_label)s_%(class)s_related_company1") company_2 = models.foreignkey(company, related_name="%(app_label)s_%(class)s_related_company2") company = models.manytomanyfield(company) contract_date = models.datefield() consideration = models.decimalfield(max_digit =10, decimal_places = 2)
if contract between 2 companies, remove line. mere fact contract model has 2 different foreign key fields company imply contract between 2 companies , each company may have multiple contracts accessible using respective related_name's.
class contract(models.model): company_1 = models.foreignkey(company, related_name="%(app_label)s_%(class)s_related_company1") company_2 = models.foreignkey(company, related_name="%(app_label)s_%(class)s_related_company2") # company = models.manytomanyfield(company) contract_date = models.datefield() consideration = models.decimalfield(max_digit =10, decimal_places = 2) if, however, want contract involving more 2 companies, remove 2 foreignkeys , use manytomany relationship so. similarly, automatically imply particular contract shared companies listed under relationship. may access contracts of particular company via related_name well.
class contract(models.model): # company_1 = models.foreignkey(company, related_name="%(app_label)s_%(class)s_related_company1") # company_2 = models.foreignkey(company, related_name="%(app_label)s_%(class)s_related_company2") companies = models.manytomanyfield(company, related_name=whatever_you_want) contract_date = models.datefield() consideration = models.decimalfield(max_digit =10, decimal_places = 2)
Comments
Post a Comment