添加多对多关系时检测重复插入

时间:2017-04-02 15:45:28

标签: django orm model

我们假设有两个模型,A和B:

class A(models.Model):
    name = models.CharField(max_length=100)


class B(models.Model):
    children = models.ManyToManyField(A)

我正在使用b.children.add()方法将 A 的实例添加到 b

a = A.objects.get(pk=SOMETHING)
b.children.add(a)

据我所知,Django默认不允许重复的多对多关系。所以我不能多次添加 A 的相同实例。

但问题出在这里,我用另一个查询获取 A 的实例,然后循环它们并逐个添加它们。如何检测重复关系? add()方法会返回一些有用的东西吗?

1 个答案:

答案 0 :(得分:1)

一眼source code就会发现Django首先检查数据库中是否存在任何条目,然后只添加新条目。但是,它不会向调用者返回任何信息。

目前尚不清楚您是否确实需要检测重复项,或者您是否只想确保它们未被添加到数据库中?如果是后者那么一切都很好。如果它是前者,则没有办法击中数据库。如果您真的关心性能,可以随时执行检查并自行更新直通表(即重新实施add())。