2016-08-18 70 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

相关问题