假设我有3个型号(博客,新闻,照片),我想获得最新的3个内容,无论它们属于哪个型号。
使用(伪)sql我可以做类似的事情:
SELECT *
FROM blog, news, photo,
WHERE is_published=True
ORDER by publication_date
LIMIT 3
我真的不想在Django中使用原始sql,因为我想要返回一个查询集,所以有没有办法用Django进行这种类型的查询?
谢谢,
答案 0 :(得分:3)
如果3个模型在某种程度上相似(就像它们看起来那样),我可能会这样做的方法是创建一个基本模型,然后让其他3个模型继承该模型。
class Publishable(models.Model):
is_published = models.BooleanField(default=False)
publication_date = models.DatetimeField()
... other fields ...
class Blog(Publishable):
...extra fields...
class News(Publishable):
...extra fields...
class Photos(Publishable):
...extra fields...
然后,你可以这样做:
Publishable.objects.order_by('-publication_date')[:3]
如果你仍然需要"输入"与检索到的模型相关联,请查看Inheritance Manager
您可能也想了解Model Inheritance的优缺点。