Злиття списків об'єктів із сортуванням

Є об'єкти із різною структурою:
class Tweet(models.Model):
    user = models.ForeignKey(User)
    text = models.CharField(max_length=140)
    created = models.DateTimeField(auto_now_add=True)
    country = models.CharField(max_length=30, blank=True)
class Retweet(models.Model):
    tweet = models.ForeignKey(Tweet)
    user = models.ForeignKey(User)
    created = models.DateTimeField(auto_now_add=True)
Отримуємо списки цих об'єктів:
tweets = Tweet.objects.filter(user=user_profile).order_by('-created')
retweets = Retweet.objects.filter(user=user_profile).order_by('-created')
Для їх злиття можна використати функцію chain:
from itertools import chain
all_tweets = chain(tweets, retweets)
Додамо параметр сортування:
from operator import attrgetter
all_tweets = sorted(chain(tweets, retweets), key=attrgetter('created'))
І, врешті-решт, змінимо порядок сортування:
all_tweets = sorted(chain(tweets, retweets), key=attrgetter('created'), reverse=True)

Коментарі