我使用“ManyToManyField using the through”的中间模型
通常,如果我不使用中间字段,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
。但这三个像来自同一个用户“/api/v2/user/2/”
我尝试在 m2m 字段添加“unique=True”属性,但 django 出现错误,因为它首先没有授予将“unique”属性添加到 m2m 字段的权限。有人可以帮助我吗?
尝试在中间模型中使用unique_together。
class M2MModel(models.Model):
field1 = models.ForeignKey(Model1)
field2 = models.ForeignKey(Model2)
class Meta:
unique_together = ('field1', 'field2')
unique_together 不适用于 M2M 关系。 更多信息。
我刚刚完成了一个与您的要求非常相似的功能,但我的选择是使用另一个简单的模型作为中间模型。
这是我的代码。
class Vote(models.Model):
class Meta:
unique_together = ['content', 'by']
content = models.ForeignKey(Content)
by = models.ForeignKey(User)
就我而言,我没有看到实施 ManyToManyField 的任何好处。
更新: 我刚刚从 here 发现 Django 不会为 ManyToManyField 提供任何内置的唯一性。您必须实施自己的验证以使其独一无二。
我使用这种方法:
class M2MModel(models.Model):
field1 = models.ForeignKey(Model1)
field2 = models.ForeignKey(Model2)
class Meta:
constraints = [
models.UniqueConstraint(
fields=["field1", "field2"],
name="each_field2_is_unique_on_each_field1",
)
]