簡體   English   中英

通過幾個模型查詢

[英]Querying through several models

我有一個django項目,其中有5種不同的模型。 他們都有日期字段。 假設我想獲取所有具有今天日期的模型的所有條目。 當然,我可以過濾每個模型,然后將結果放在一個大列表中,但是我認為這很不好。 有什么有效的方法可以做到這一點?

我認為單獨查詢每個模型不是一個壞主意-實際上,從數據庫角度來看,我看不到您將如何做到這一點,因為每個模型都需要單獨的SQL查詢。 即使按照@Nagaraj的建議,您在每個其他模型引用中都建立了一個通用的Date模型,您仍然需要分別查詢每個模型。 你可能是正確的,但是,把成果轉化為一個列表是不好的做法,除非你確實需要加載的每一個對象到內存中,為解釋在這里

請注意,[將QuerySet評估為列表]可能會占用大量內存,因為Django會將列表中的每個元素加載到內存中。 相反,在QuerySet上進行迭代將僅利用數據庫來加載數據並僅在需要時實例化對象。

在不進一步了解用例的情況下,很難建議其他選項。 但是,我認為我可能會通過制作QuerySet的列表或字典來實現此目的,然后可以在我的視圖中使用它,例如:

querysets = [cls.objects.filter(date=now) for cls in [Model1, Model2, Model3]]

看一下使用多重繼承在此處 ,文檔)在類中定義那些日期字段,您可以將其子類化為要在查詢中返回的類。

例如:

class DateStuff(db.Model):
  date = db.DateProperty()

class MyClass1(DateStuff):
  ...

class MyClass2(DateStuff):
  ...

我相信Django將允許您查詢DateStuff類,並且它將返回MyClass1和MyClass2中的對象。

感謝@nrabinowitz指出我以前的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM