我有两个要组合和排序的查询集。

以下是我的疑问:
latestbooks = Book.objects.all().order_by('-added')latestvideos = Video.objects.all().order_by('-added')
我想组合这些查询并在将它们传递到我的模板之前对它们进行排序,以便我可以创建一个列表来显示网站上的最新事件——无论是新书还是新视频,它们都按照添加的顺序.

最佳答案

您可以将它们组合和排序为列表,但不能作为查询集。功能,这并不重要,但请记住,不可能进行进一步的过滤。

latestbooks = Book.objects.all().order_by('-added')
latestvideos = Video.objects.all().order_by('-added')

latest = list(latestbooks) + list(latestvideos)
latest_sorted = sorted(latest, key=lambda x: x.added, reverse=True)

更新

如果您使用不同的属性名称,它仍然是可能的,但它开始变得难看,并且这可能不适用于两个以上的变体:
sorted(latest, key=lambda x: x.added if hasattr(x, 'added') else x.desadded, reverse=True)

关于django - 对来自不同表的两个查询集进行组合和排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11635826/

10-13 08:59