-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