按日期订购2个不同的查询集

时间:2015-10-08 18:01:48

标签: python django django-queryset

这是一个简单的问题,我可以通过for循环和大量比较实现这一点,但我想知道是否有更好的方法。

我有两个查询集:

  comments = Comment.objects.all()
  actions = Action.objects.all()

所以,我需要一个包含按日期排序的评论和操作的列表。 Comment模型和Action模型具有日期(date=models.DateTimeField(auto_now_add=True))字段。

换句话说:

wall = [] # Alternate Comments and Actions ordered by date

2 个答案:

答案 0 :(得分:1)

这是Django ORM擅长的东西!

https://docs.djangoproject.com/en/1.8/topics/db/queries/#retrieving-specific-objects-with-filters

true

然后你可以遍历两个列表,因为它们已经按日期排序,你只需要对每个元素进行一次成对比较,按日期对它们进行排序!

答案 1 :(得分:1)

您可以拥有合并评论和操作的列表

comments = Comment.objects.all()
actions = Action.objects.all()
from itertools import chain
wall = list(chain(comments, actions))

您可以按属性排序对象的python列表,这是您案例中的日期

wall.sort(key=lambda x: x.date)

您还可以在lambda函数中传递反向True / False,用于降序和升序

wall.sort(key=lambda X:x.date, reverse=True)