2015-10-08 2 views
0

Это простой вопрос, я мог бы достичь этого с помощью цикла for и большого количества сравнений, но мне интересно, есть ли лучший способ.Закажите 2 разных запроса по дате

У меня есть два querysets:

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 

ответ

1

Вы можете иметь список объединенных комментариев и действий

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

Вы можете сортировать тогда список питон объектов по атрибуту, который является дата в вашем случае

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

Вы можете также пройти обратный True/False в лямбда-функции, для убывания и возрастания

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

Это то, что Django ORM велик на!

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

comments = Comment.objects.order_by('date') 
actions = Actions.objects.order_by('date') 

Затем вы можете перебрать в обоих списках, и потому, что они уже упорядочены по дате вам нужно только одно попарное сравнение для каждого элемента отсортировать их по дате!

Смежные вопросы