Django 在一个数据集中混合和排序3个模型

Django 在一个数据集中混合和排序3个模型,django,django-models,Django,Django Models,我有三个模型在我制作的网站上展示了一些活动。歌曲、投票和评论。它们都共享一个公共列when,该列显示记录的创建时间 我想显示一个基于所有三个模型的活动列表。简言之,我想把它们混在一起,在时按进行排序,然后刮去前10条记录 问题是我如何做到这一点。我知道我可以为每个模型获得10个记录,将它们放入字典中并按日期排序(好吧,一旦我知道如何在Python中按日期排序),但这似乎效率相当低。这可能就是实现这一点的方法。事实上,这并没有那么低效——对30个项目进行排序相当快,Python有一个非常好的内置排

我有三个模型在我制作的网站上展示了一些活动。歌曲、投票和评论。它们都共享一个公共列
when
,该列显示记录的创建时间

我想显示一个基于所有三个模型的活动列表。简言之,我想把它们混在一起,在时按
进行排序,然后刮去前10条记录


问题是我如何做到这一点。我知道我可以为每个模型获得10个记录,将它们放入字典中并按日期排序(好吧,一旦我知道如何在Python中按日期排序),但这似乎效率相当低。

这可能就是实现这一点的方法。事实上,这并没有那么低效——对30个项目进行排序相当快,Python有一个非常好的内置排序算法

items = list(Song.objects.order_by('when')[:10])
items.extend(list(Vote.objects.order_by('when')[:10]))
items.extend(list(Comment.objects.order_by('when')[:10]))

items.sort(key=lambda x: x.when)

items = items[:10]

这可能就是解决问题的方法。事实上,这并没有那么低效——对30个项目进行排序相当快,Python有一个非常好的内置排序算法

items = list(Song.objects.order_by('when')[:10])
items.extend(list(Vote.objects.order_by('when')[:10]))
items.extend(list(Comment.objects.order_by('when')[:10]))

items.sort(key=lambda x: x.when)

items = items[:10]

虽然重新处理模型可能为时已晚,但有一种可能性是将公共功能提取到父类中。通过这种方式,您只需在父模型之外运行查询。

虽然重新处理模型可能为时已晚,但一种可能性是将公共功能提取到父类中。这样,您就可以从父模型中运行查询。

它仍然需要从数据库中提取20条完整记录到django中,这比纯数据库版本要多,但是,是的,这并不像我想象的那样肮脏(代码方面)。我会给它一个机会,让你知道我的进展如何。它仍然需要比纯db版本多拉20条完整记录到django中,但是的,这并不像我想象的那样肮脏(代码方面)。我会试一试,让你知道我进展如何。