Использование order_by date в списке
Я создаю приложение для блога и обращаюсь к различным моделям запросом и добавляю их в один список, и я пытаюсь order_by('-date')
в списке.
Дата имени одинакова во всех моделях.
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 Comment(models.Model):
comment_by = models.ForeignKey(User, on_delete=models.CASCADE)
post_of = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
body = models.CharField(max_length=30)
date = models.DateTimeField(auto_now_add=True)
class Like
....
date = models.DateTimeField(auto_now_add=True)
class Dislike
....
date = models.DateTimeField(auto_now_add=True)
views.py
def list_page(request,blogpost_id):
post = get_object_or_404(BlogPost, id=blogpost_id)
comments = []
for q1 in post.comment_set.all()
comments.append(q1)
likes = []
for q2 in post.like_set.all()
likes.append(q2)
dislikes = []
for q3 in post.dislike_set.all()
dislikes.append(q3)
# Mixing all the lists
all_lists = sum([comments,likes,dislikes], [])
context = {'all_lists':all_lists}
return render(request, 'listPage.html', context)
- Я также попробовал добавить
order_by('-date')
Но он показал
у объекта 'list' нет атрибута 'order_by'
- Я пробовал как
.all().order_by('-date')
, но это действовало только на запрос.
Я буду очень признателен за вашу помощь. Спасибо
Попробуйте использовать метод sort(). Вот пример, который может помочь.
from datetime import datetime
my_dates = ['5-Nov-18', '25-Mar-17', '1-Nov-18', '7-Mar-17']
my_dates.sort(key=lambda date: datetime.strptime(date, "%d-%b-%y"))
print(my_dates)
вы можете попробовать соединить их в цепочку примерно так в вашем файле views.py.
from itertools import chain
all_lists = sorted(chain(comments,likes,dislikes),key=lambda x:x.date,reverse=True)
reverse = True используется для изменения порядка списка, по умолчанию False, и вы сами можете изменить его. Лучшее решение для этого - попытаться получить комментарии, антипатии, лайки внутри шаблона