我有一个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. Dapper - 查询多个模型
- 4. Laravel:concat多个模型查询
- 5. SQL查询通过相关模型
- 6. 通过模型查询数据库
- 7. 对多个模型的一个查询
- 8. 用一个值查询多个模型
- 9. 续集belongsToMany通过查询目标模型获取源模型
- 10. Django/Sphinx:如何查询多个模型?
- 11. Laravel查询多个相关模型
- 12. GraphQL在模型上的多个查询
- 13. Django:使用模型查询多个表
- 14. 通过解析查询多个值
- 15. 通过URL查询中多个URL PARAMS
- 16. ActiveRecord的查询通过多个连接
- 17. 通过多个ID排序MySQL查询
- 18. 通过ActiveForm创建多个模型Yii2
- 19. 通过多个关系访问模型
- 20. 通过多个模型筛选故障
- 21. 如何链接这些模型以通过CakePHP关联查询多个表?
- 22. 通过几个相关的模型让单一的ActiveRecord查询
- 23. Rails通过来自同一模型的两个属性查询
- 24. MVC模型通过查看
- 25. MVC:通过控制器查看多个模型
- 26. cakephp - 通过多个模型查找条件
- 27. Rails 5:如何通过2个模型查看模型?
- 28. 轨多对多模型查询问题
- 29. 通过过滤多行选择查询
- 30. Django:通过多对多订购模型
有5个模型中所有日期字段的任何相关性接近这个?我的意思是为什么不制定它,以便你创建一个共同的日期字段? –
@NagarajTantri模型之间没有依赖关系(每个模型都代表项目的不同部分)。但是,我会如何制作普通的日期字段呢?通过模型继承? – nukl
关于组合查询集有点相关的问题:http://stackoverflow.com/questions/431628 – akaihola