我有一個django項目,其中有5個不同的模型。他們都有日期字段。假設我想從今天的日期獲取所有模型中的所有條目。當然,我可以過濾每個模型,並將結果放在一個大列表中,但我相信這很糟糕。什麼是有效的方式來做到這一點?通過多個模型查詢
通過多個模型查詢
回答
我不認爲單獨查詢每個模型是一個壞主意 - 事實上,從數據庫的角度來看,我看不出你會怎麼做,否則,因爲每個模型都需要一個單獨的SQL查詢。即使像@Nagaraj所說的那樣,你爲每一個其他模型引用建立了一個通用的Date模型,你仍然需要分別查詢每個模型。你可能是正確的,但是,把成果轉化爲一個列表是不好的做法,除非你確實需要加載的每一個對象到內存中,爲解釋here:
被警告,雖然,[評估查詢集爲一個列表]可能會有很大的內存開銷,因爲Django會將列表中的每個元素加載到內存中。相比之下,迭代QuerySet將利用數據庫加載數據並僅在需要時才實例化對象。
很難在不瞭解您的用例的情況下提出其他選項。不過,我覺得我可能會通過使查詢集的列表或字典,它然後我可以在我的視圖中使用,例如:
querysets = [cls.objects.filter(date=now) for cls in [Model1, Model2, Model3]]
看看使用多重繼承(文檔here)來定義的,你可以在你想查詢返回的類繼承一個類的日期字段。
例如:
class DateStuff(db.Model):
date = db.DateProperty()
class MyClass1(DateStuff):
...
class MyClass2(DateStuff):
...
我相信Django將讓你查詢在DateStuff類,它會從MyClass1的和MyClass2返回對象。
感謝@nrabinowitz指出我以前的錯誤。
我很困惑 - PolyModel是Appengine特有的,不是嗎?它不是Django的一部分,我不認爲OP可以在這裏使用它。但是,關於繼承的觀點是一個很好的觀點 - 相關的Django文檔[可在此處獲得](https://docs.djangoproject.com/en/1.3/topics/db/models/#multi-table-inheritance)。 – nrabinowitz
啊,你是對的。我的錯。 Django = App-Engine對我來說,所以我忽略了它。答案已被編輯。 – SteveShaffer
- 1. Rails通過多個模型查詢
- 2. 通過關聯查詢模型有很多通過關聯
- 3. 查詢多個Rails模型
- 4. Laravel:concat多個模型查詢
- 5. 查詢多個Django模型
- 6. Dapper - 查詢多個模型
- 7. SQL查詢通過相關模型
- 8. 填寫模型類通過查詢
- 9. 通過模型查詢數據庫
- 10. CakePHP的多表通用查詢模型
- 11. 用一個值查詢多個模型
- 12. 對多個模型的一個查詢
- 13. mysql通過單個查詢計算多個類型
- 14. 續集belongsToMany通過查詢目標模型獲取源模型
- 15. Laravel查詢多個相關模型
- 16. GraphQL在模型上的多個查詢
- 17. Django/Sphinx:如何查詢多個模型?
- 18. Django:使用模型查詢多個表
- 19. 通過多個模型篩選故障
- 20. 如何通過多個模型循環
- 21. 通過ActiveForm創建多個模型Yii2
- 22. 通過多個關係訪問模型
- 23. Redis - 通過多個鍵進行查詢
- 24. 通過多個參數查詢
- 25. 通過URL查詢中多個URL PARAMS
- 26. LINQ多個組的查詢通過
- 27. 通過解析查詢多個值
- 28. 通過多個連接優化查詢
- 29. ActiveRecord的查詢通過多個連接
- 30. 通過多個ID排序MySQL查詢
有5個模型中所有日期字段的任何相關性接近這個?我的意思是爲什麼不制定它,以便你創建一個共同的日期字段? –
@NagarajTantri模型之間沒有依賴關係(每個模型都代表項目的不同部分)。但是,我會如何製作普通的日期字段呢?通過模型繼承? – nukl
關於組合查詢集有點相關的問題:http://stackoverflow.com/questions/431628 – akaihola