django - 在1个查询中查询每个相同字段的多个模型

时间:2014-03-14 18:00:29

标签: django django-queryset

假设我有3个型号(博客,新闻,照片),我想获得最新的3个内容,无论它们属于哪个型号。

使用(伪)sql我可以做类似的事情:

SELECT * 
FROM blog, news, photo, 
WHERE is_published=True
ORDER by publication_date
LIMIT 3  

我真的不想在Django中使用原始sql,因为我想要返回一个查询集,所以有没有办法用Django进行这种类型的查询?

谢谢,

1 个答案:

答案 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的优缺点。