django中多个模型的object_list

时间:2009-11-15 13:59:58

标签: django django-models aggregate

我有多个与此类似的抽象模型

Class Article(models.Model):
    title = models.CharField()
    body = models.TextField()
    created_date = models.DateTimeField()
    author_name = models.CharField()

class Video(models.Model):
    title = models.CharField()
    body = models.TextField()
    created_date = models.DateTimeField()
    video_asset = models.CharField()

现在,在特定页面上,我想基于created_date将这两个模型聚合到一个列表中。我想知道的所有模型都有titlecreated_date,所以我可以这样做:

<ul>
{% for object in object_list %}
    <li>{{ object.title }} on {{ object.created_at }}</li>
{% endfor %}
</ul>

我可以指望那些领域没有问题。

我考虑过创建一个额外的模型并使用通用外键。有点像聚合模型。然后每次创建一个新对象时,我只会发出一个要创建的对象,然后从这个通用表中拉出来。我不喜欢这个想法。似乎高度多余。

有没有?

更新:我找到了这个条目Using django how can I combine two queries from separate models into one query?,但它在我的情况下不起作用,因为我正在使用抽象模型类(我只是在示例中没有显示它以保持简单并尽可能清楚)。我研究了继承而不是抽象,但我认为不断加入的性能会受到影响。也许不是

2 个答案:

答案 0 :(得分:2)

只需在视图中按created_date(或created_at(两者都使用))对两个模型进行排序,然后将结果合并到一个列表中。然后可以在模板中使用此列表。不需要模型继承或聚合模型。

答案 1 :(得分:1)

你有错别字...类文章应该是类文章 将类修复为类(使其为小写)