2015-07-21 75 views
0

我有两个模型,公司和合同。每份合同都在两家公司之间。现在,公司和合约之间似乎存在ManyToMany关系,例如,一家公司可以有多个合同,而且一个合同在多个公司之间。它是否正确?如果是的话,你如何在Django中指定?它是通过两个外键在一个模型中?Django中可以有多个关系有两个外键?

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) 

回答

2

如果合同只是在两家公司之间,那么只需删除这一行。单纯的事实是,您的合同模型对公司有两个不同的外键字段,这意味着合同仅在两家公司之间,每家公司可能拥有多个可使用各自的related_name进行访问的合同。

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) 

但是,如果你要涉及两个以上公司的合同,然后删除这两个foreignkeys并使用一个多对多的关系,像这样。同样,这将自动暗示特定的合同由所有在该关系下列出的公司共享。您也可以通过其related_name访问特定公司的合同。

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) 
+0

谢谢!我认为你的解释很有道理。 – EarlyCoder

+0

好的!如果您没有更多的问题或澄清以利于他人,请接受此答案!谢谢! –

相关问题