【发布时间】:2017-08-27 11:19:09
【问题描述】:
假设有两个模型,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() 方法是否返回有用的东西?
【问题讨论】:
-
在调用
add方法之前决定使用一个变量来保持b.children.count(),在添加一个项目后与新值比较之后。但这是一个临时解决方案,性能很差(因为每次我在查询集上调用count(),它都会命中数据库)