Использование 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, и вы сами можете изменить его. Лучшее решение для этого - попытаться получить комментарии, антипатии, лайки внутри шаблона

Вернуться на верх