当我使用中间模型时,多对多关系并不是唯一的。

时间:2013-02-07 14:36:56

标签: django many-to-many tastypie relation

我使用中间模型“ManyToManyField使用直通”
通常,如果我不使用中间字段,则m2m关系将是唯一的,并且不能具有重复数据。

我使用中间模型后。 m2m之间的关系可以有相同的数据。像这样

|    |    ['0'] (
|    |    |    addToProfile => Array (0)
|    |    |    (
|    |    |    )
|    |    |    endDate =  NULL
|    |    |    feedType =  "N"
|    |    |    id =  1
|    |    |    info =  "Big Kuy No Fear"
|    |    |    likeMaker => Array (3)
|    |    |    (
|    |    |    |    ['0'] =  "/api/v2/user/2/"
|    |    |    |    ['1'] =  "/api/v2/user/2/"
|    |    |    |    ['2'] =  "/api/v2/user/2/"
|    |    |    )
|    |    |    like_count =  "3"

我正在建立一个社交网络。所以这是我的feed对象有3个like_count s。但这三个来自同一个用户“/ api / v2 / user / 2 /”

我尝试在m2m字段添加“unique = True”属性,但django会出现错误,因为它首先没有授予将“unique”属性添加到m2m字段的权限。任何人都可以帮助我

3 个答案:

答案 0 :(得分:7)

尝试在中间模型中使用unique_together

class M2MModel(models.Model):
    field1 = models.ForeignKey(Model1)
    field2 = models.ForeignKey(Model2)

    class Meta:
        unique_together = ('field1', 'field2')

答案 1 :(得分:2)

unique_together不适用于M2M关系。 More info

答案 2 :(得分:0)

我刚刚完成了与您的要求非常相似的功能,但我的选择是使用另一个简单模型作为中间模型。

这是我的代码。

class Vote(models.Model):
    class Meta:
        unique_together = ['content', 'by']

    content = models.ForeignKey(Content)
    by = models.ForeignKey(User)

在我的情况下,我认为实现ManyToManyField没有任何好处。

<强>更新: 我刚从here发现Django不会为ManyToManyField制作任何内置的唯一内容。您必须实施自己的验证才能使其独一无二。