2016-08-18 69 views
0

的情況下,我有兩個型號:Django的模型可以在只有一個B型

class ModelA(models.Model): 
    name = models.CharField(max_length=256) 

class ModelB(models.Model): 
    user = models.ForeignKey(MyUser) 
    model_a = models.ForeignKey(ModelA) 
    points = models.IntegerField(default=0) 

我怎樣才能防止創建相同的對象?例如:

我有ModelA的A,B,C實例和兩個用戶。在ModelB中,我需要這樣的關係:

用戶1只能有一個'鏈接'到A,一個是B等。 User2相同。他只能對每個ModelA實例「鏈接」。

每個用戶可以在與ModelA關聯的ModelB中擁有一條記錄。

E.g. (用戶1,a,100),(用戶2,A,50) 但是,如果我會嘗試做這樣的事情

...create(user=User1, model_a=A, points=50) 

我需要從USER1數據庫記錄得到,和A,和廣告點,不會創建另一個類似的模型。

+0

,我不明白你的問題,如果有一個一對一的關係,那麼你應該把它定義爲這樣 – Sayse

+0

如果我在model_a中添加OneToOne,然後我無法將相同的ModelA添加到不同的用戶。 – mrsolupo

+1

然後用戶是ModelA是多的那麼1,因此外鍵需要在用戶 – Sayse

回答

1

所以你希望usermodel_a的所有配對都是唯一的。您可以使用unique_together在模型的元數據中指定此項。

unique_together = (("driver", "restaurant"),)

這是元組時 一起考慮必須是唯一的一個元組。它用於Django管理員,並在數據庫級別執行 (即,CREATE TABLE語句中包含相應的UNIQUE語句 )。

Django documentation - unique_together

因此修改如下方式模型:

class ModelB(models.Model): 
    user = models.ForeignKey(MyUser) 
    model_a = models.ForeignKey(ModelA) 
    points = models.IntegerField(default=0) 

    class Meta: 
     unique_together = (('user', 'model_a'),) 
+0

上定義謝謝,你知道我在哪裏可以捕捉到這個獨特的期望? (什麼時候發生)在之前添加一些自己的代碼? – mrsolupo

相關問題