-2
多对多的过滤关系的一端,倒数后我有两个模型是一个多对多的关系,我想会发生以下效果:Django的 - 总是产生价值1
- 考虑模型
A
和B
在与eachother多对多的关系。 A
的related_name为B
是bs
和B
的为A
相关的名字是as
- 每当我创建一个
A
或B
它都会被立即连接到一个或多个其他的,所以最初所有实例A
和B
将至少有一个相关的对象。 - 如果我想删除
A
(姑且称之为a0
)我希望它删除所有B
s表示会留下没有相关A
的a0
被删除后,所以基本上我想删除只有所有B
a0
在其相关的集合as
(这也是相反的例子)。
我是想实现这个是这样的,当我想删除A
如a0
,我会说:
a0.bs.annotate(Count('bs')).filter(bs__count=1).delete()
但是这将无条件地a0.bs
删除所有相关B
的情况下,当我去了壳来测试它,我会得到这样的结果:
>>> a0.bs.annotate(Count('bs')).values_list('bs__count',flat=True)
<QuerySet [1, 1, 1, 1]>
>>> B.objects.filter(as=a0).annotate(Count('bs')).values_list('bs__count',flat=True)
<QuerySet [1, 1, 1, 1]>
但我也将获得这一点,如果我这样做有在同一个数据库实例:
>>> B.objects.annotate(Count('bs')).filter(as=a0).values_list('bs__count',flat=True)
<QuerySet [1, 4, 6, 6]>
所以这是3出这些B
实例4 owuldn't满足count == 1
但如果我筛选特定B
情况下,我想看看他们之前都满足的情况下注释,这似乎比使用的最后一个命令(具有准确结果的那个命令更有效)更有效。
任何人都可以给我这种效果的任何见解吗?
这不是使用A,B,a0和b0的数学问题,请使用适当的变量名称 – e4c5