6

我使用中间模型“使用通过的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_counts 。但是这三个来自同一个用户“/api/v2/user/2/”

我尝试在 m2m 字段中添加“unique=True”属性,但 django 出现错误,因为它最初没有授予将“unique”属性添加到 m2m 字段的权限。谁能帮我?

4

3 回答 3

11

尝试在中间模型中使用unique_together 。

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

    class Meta:
        unique_together = ('field1', 'field2')
于 2013-02-07T14:58:11.150 回答
3

unique_together 不适用于 M2M 关系。更多信息

于 2014-04-08T19:34:40.527 回答
1

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

这是我的代码。

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

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

就我而言,我认为实现 ManyToManyField 没有任何好处。

更新:我刚刚从这里发现 Django 不会为 ManyToManyField 一起创建任何内置的唯一性。您必须实施自己的验证以使其独一无二。

于 2013-02-07T18:21:49.333 回答