Django模型A只能有一个模型B的实例

时间:2016-08-18 13:31:24

标签: django

我有两种模式:

session.gc_maxlifetime

如何防止创建同一个对象?例如:

我有ModelA的A,B,C实例和两个用户。在ModelB中,我需要这样的关系:

User1只能有一个'链接'到A,一个到B等。 User2相同。他只能将一个“链接”到每个ModelA实例。

每个用户可以在ModelB中有一条与ModelA关联的记录。

E.g。 (User1,A,100),(User2,A,50) 但是,如果我会尝试做这样的事情

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)

我需要从带有user1,A和广告点的db记录中获取,而不是创建另一个类似的模型。

1 个答案:

答案 0 :(得分:1)

因此,您希望所有usermodel_a对都是唯一的。您可以使用unique_together在模型的元数据中指定此内容。

  

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

     

这是一个元组元组,必须是唯一的   一起考虑。它在Django管理员中使用,并在   数据库级别(即适当的UNIQUE语句)   包含在CREATE TABLE语句中。

     

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'),)