我已經緩存了一個常見的查詢集,我想根據情況根據不同的字段進行過濾。我想知道是否通過篩選評估的查詢集,如果我失去了首先緩存它的優勢; 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篩選模板中的查詢集
- 4. Django按最高評分篩選查詢集
- 5. Django:篩選查詢集然後計數
- 6. 使用Linq查詢進行VB.NET篩選
- 7. 緩存查詢集和重新評估
- 8. Django通過查詢參數進行休息篩選
- 9. Django只篩選特定於查詢集的選項
- 10. 評估在查詢
- 11. Django的篩選查詢中設置
- 12. Django的查詢篩選一組數據
- 13. Django的自遞歸ManyToManyField篩選查詢
- 14. 如何評估/解釋sphinxql查詢?
- 15. 針對多個項目查詢集的Django篩選器
- 16. Django的篩選查詢集反向關係
- 17. 如何評估羣集?
- 18. 如何在System.DBnull時不進行評估?
- 19. 如何在Django中的單個查詢集上進行聚合?
- 20. Django篩選器查詢外鍵
- 21. Django的查詢集流行
- 22. 篩選父集合通過LINQ查詢
- 23. 動態篩選PK中查詢集
- 24. 在OnClientClick中進行評估
- 25. 如何篩選JPQL查詢中的子集合?
- 26. 如何篩選查詢集與排除和ForeignKey的
- 27. 如何篩選Django的CommaSeparatedIntegerField
- 28. 何時強制LINQ查詢評估?
- 29. SQL篩選查詢
- 30. 的Django如何篩選基於嵌套多對多關係查詢集在一個查詢