2015-07-21 63 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

好的!如果您沒有更多的問題或澄清以利於他人,請接受此答案!謝謝! –

相關問題