我有一个django项目,里面有5个不同的模型。所有这些都有日期字段。假设我希望获得今天所有型号的所有条目。当然,我可以过滤每个模型,并将结果放在一个大的列表中,但我相信这很糟糕。什么是有效的方法呢?
答案 0 :(得分:4)
我认为分别查询每个模型并不是一个坏主意 - 事实上,从数据库的角度来看,我无法看到你能做到的其他方式,因为每个模型都需要一个单独的SQL查询。即使像@Nagaraj建议的那样,每隔一个模型引用设置一个公共日期模型,你仍然需要分别查询每个模型。然而,你可能是正确的,将结果放入列表是不好的做法,除非你真的需要将每个对象加载到内存中,如here所述:
但请注意,[将QuerySet评估为列表]可能会产生大量内存开销,因为Django会将列表中的每个元素加载到内存中。相反,迭代QuerySet将利用您的数据库加载数据并仅在您需要时实例化对象。
如果不了解您的用例,很难提出其他选项。但是,我想我可能会通过制作QuerySets的列表或字典来解决这个问题,然后我可以在我的视图中使用它,例如:
querysets = [cls.objects.filter(date=now) for cls in [Model1, Model2, Model3]]
答案 1 :(得分:2)
看一下使用多重继承(文档here)来定义一个类中的日期字段,您可以在要查询的类中继承这些日期字段。
例如:
class DateStuff(db.Model):
date = db.DateProperty()
class MyClass1(DateStuff):
...
class MyClass2(DateStuff):
...
我相信Django会让你查询DateStuff类,它会从MyClass1和MyClass2返回对象。
感谢@nrabinowitz指出我以前的错误。