我已經緩存了一個常見的查詢集,我想根據情況根據不同的字段進行過濾。我想知道是否通過篩選評估的查詢集,如果我失去了首先緩存它的優勢; Django是否只是從頭開始創建另一個查詢集,這是創建緩存查詢集所涉及的查詢集合以及之後應用的過濾器的集合?Django如何進行篩選評估的查詢集?
3
A
回答
5
是的,結果被拋出。
您可以從源看到這一點:filter()
電話_filter_or_exclude()
,這就要求_clone()
,然後添加到它的查詢。 _clone
,你可以看到,沒有設置_result_cache
屬性。
總的來說,我們不太清楚它能做些什麼來保持共同的結果。如果它是一個帶有小結果集的複雜查詢,它可以替換爲只發出SQL來檢查主鍵是您找到的結果之一,但這並不總是更有效,在某些情況下會混淆語義(如果數據庫以影響查詢結果的方式進行更改,而這種方式會影響查詢結果的緩存時間和添加過濾器之間的時間)。
如果要強制手動保存的ID的這種行爲,你可以這樣做:
pks = SomeObject.objects.filter(...).values_list('pk', flat=True)
some_of_them = SomeObject.objects.filter(pk_in=pks).filter(...)
others = SomeObject.objects.filter(pk_in=pks).filter(...)
您還可以,當然只是做過濾在Python,例如通過
common = SomeObject.objects.filter(...)
some_of_them = [m for m in common if m.attribute == 'foo']
others = [m for m in common if m.other_attribute == 'bar']
(你也可以使用filter(lambda m: m.attribute == 'foo', common)
如果你首選,或包裹的common
的定義list
更加明確。)
無論這些或一個補發查詢很大程度上取決於大小所涉及的集合,過濾器的複雜性以及存在的指標。
相關問題
- 1. 在Django查詢集中篩選子行
- 2. 本地評估Django鏈式查詢集
- 3. 在Django中篩選評估的QuerySet
- 4. Django篩選模板中的查詢集
- 5. Django按最高評分篩選查詢集
- 6. Django:篩選查詢集然後計數
- 7. 如何篩選的查詢集Django的modelformset多對多memeber
- 8. Django根據ManyToMany對象的數量進行查詢篩選
- 9. 篩選下拉查詢集
- 10. 緩存查詢集和重新評估
- 11. 使用Linq查詢進行VB.NET篩選
- 12. Django通過查詢參數進行休息篩選
- 13. 評估在查詢
- 14. Django只篩選特定於查詢集的選項
- 15. 用於評估多行的SQL查詢
- 16. 如何篩選SQL查詢
- 17. Django的篩選查詢集上多列值的「元組」
- 18. 如何評估/解釋sphinxql查詢?
- 19. Django的查詢篩選一組數據
- 20. Django的篩選查詢中設置
- 21. Django的自遞歸ManyToManyField篩選查詢
- 22. Django的篩選器查詢外鍵
- 23. Django的查詢集遍歷(不評價)
- 24. 如何評估羣集?
- 25. Django的REST框架篩選查詢集基於URL
- 26. 針對多個項目查詢集的Django篩選器
- 27. Django的篩選查詢集反向關係
- 28. 如何在System.DBnull時不進行評估?
- 29. Django - 如何查詢Django評論框架
- 30. 如何根據多對多關係的數量篩選Django查詢集?