Сортировка (order_by) в списке

Я создаю BlogApp и пытаюсь sort или order_by в списке, который содержит несколько запросов.

models.py

class BlogPost(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    date = models.DateTimeField(auto_now_add=True)

class Comments(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    blog_of = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    body = models.CharField(max_length=30)
    date_added = models.DateTimeField(auto_now_add=True)

views.py

def mypage(request):
    query_1 = list(BlogPost.objects.filter(user=request.user).order_by('-date'))

    query_2 = list(Comment.objects.filter(user=request.user).order_by('date_added'))


    results = sorted(chain(query_1, query_2),key=attrgetter('date') , reverse=True)

    context = {'results':results}
    return render(reques, 'mypage.html', context)

Но показывает

У объекта 'Comment' нет атрибута 'date'

Я думаю, что это потому, что имя поля даты отличается в обеих моделях, и я сортирую только по одному, но я не знаю, как я могу сортировать с разными именами полей.

Любая помощь будет очень признательна. Спасибо

Или просто добавьте его как свойство:

class Comments(models.Model):  # do NOT give a model a plural name!
    # ....
    @property
    def date(self):
        return self.date_added
        # or if it is a datetimefield
        # return self.date_added.date()

Также вы можете просто написать более настраиваемый ключ сортировки (например, в случае, если задействованные модели из сторонних приложений).

def order(obj):
    try:
        return obj.date
    except AttributeError:
        return obj.date_added

# ...
results = sorted(chain(query_1, query_2), key=order, reverse=True)
Вернуться на верх