在我的具体情况下,我有两种“消息”,我需要检索和分页.
我们忽略细节,只是说第一种是一个名为Msg1的模型,另一个叫做Msg2
这两个模型的领域是完全不同的,两个模型共有的唯一字段是“日期”和“标题”(当然,id).
我可以得到Msg1.objects.all()和Msg2.objects.all(),但我可以将这两个查询组合成一个查询,按日期排序,并分页?
我需要保留查询的懒惰性质.
简单的解决方案是列出(查询)两个查询并将它们组合在一个python列表中.但由于明显的原因,这是无效率的.
我在模型和dp-api上查看了django引用,但似乎没有办法将不同模型/表的查询组合成一个.
解决方法
我建议你使用
Model inheritance.
创建一个包含日期和标题的基本模型.子类Msg1和Msg2如下所述.使用基本模型进行所有查询(填写页面),然后在最后一刻切换到派生类型.
关于继承的真正伟大的事情是,django然后允许你使用来自其他模型的外键的基本模型,所以你可以使你的整个应用程序更加灵活.在引擎盖下,它只是一个基础模型的表,每个子模型的表包含一对一的键.