當您將pk整數列表傳入add或remove時 - 是否訪問了對象?即。是否有每個PK的數據庫調用?Django manytomany添加或刪除
1
A
回答
2
當您創建ManyToManyField
而未指定中間表時(使用through
)Django會爲您生成一個表。這個表格只需要兩個模型的pks,所以不需要從其他對象中選擇任何東西來保存新的關聯關係。
將爲它們中的每一個創建一個新行,可能使用許多插入,但不一定需要很多數據庫調用(例如,可能有多個插入命令的單個SQL查詢)。這些創建(對象的pks)所需的所有信息都可用,因此不需要任何更多的數據庫命中。
更新:似乎我錯了。縱觀源(Django的/ DB /模型/場/ related.py),我看到它執行對每個對象的獨立創作:在做之前是
for obj_id in new_ids:
self.through._default_manager.using(db).create(**{
'%s_id' % source_field_name: self._pk_val,
'%s_id' % target_field_name: obj_id,
})
,它還會檢查是否有任何PKS供應在數據庫中已經存在(爲了避免重複的條目/唯一約束違規):使用
vals = self.through._default_manager.using(db).values_list(target_field_name, flat=True)
vals = vals.filter(**{
source_field_name: self._pk_val,
'%s__in' % target_field_name: new_ids,
})
new_ids = new_ids - set(vals)
該檢查雖然有一個查詢做...
0
你有沒有試過檢查自己QuerySet.query屬性?
相關問題
- 1. 在Django中添加ManyToMany
- 2. 在DataGridComboboxColumn中刪除或添加項添加或刪除
- 3. Django從ManyToMany關係中刪除對象
- 4. Django - ManyToMany中的對稱ForeignKeys或級聯刪除?
- 5. iAds:刪除或添加?
- 6. QLPreviewController刪除或添加UIBarButtonItems
- 7. NSMutableArray添加或刪除
- 8. ManyToMany沒有刪除
- 9. 休眠ManyToMany刪除
- 10. 在django上添加ManyToMany字段
- 11. 刪除ManyToMany的關係
- 12. 小組將不火「添加」或「刪除」,添加或刪除項目
- 13. Javascript添加/刪除表單在Django formset
- 14. 刪除Django中的「添加」功能admin
- 15. 添加到ManyToMany提前
- 16. jpa刪除manytomany鏈接
- 17. JPA Unidirectional ManyToMany無法刪除
- 18. 休眠@ManyToMany刪除關係
- 19. ManyToMany關係刪除行
- 20. 休眠:ManyToMany反刪除
- 21. 休眠刪除關係manyToMany
- 22. Symfony Doctrine:刪除ManyToMany關聯
- 23. ManyToMany刪除使用休眠
- 24. 學說ManyToMany:刪除對象
- 25. Django:過濾ManyToMany加入
- 26. Django ManyToMany加入查詢
- 27. ImmutableJS.Set - 根據bool添加或刪除
- 28. 如何添加或刪除的actionMenuBar
- 29. 不能刪除或者添加主鍵
- 30. 動態添加或刪除視圖
'add'和'remove'沒有查詢屬性來檢查,但也有類似的方法。執行'from django.db import connection',然後在添加或刪除多對多關係之前和之後打印'connection.queries'。 – Alasdair 2012-02-19 16:12:55
謝謝,不知道。 – side2k 2012-02-20 04:03:31