Сортировка (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)