Тег шаблона показывает дублирующиеся элементы в шаблоне
Я создаю приложение для блога и создал template tag
от sort posts by likes
. Шаблонный тег работает нормально, но когда я сортирую by likes
, то он показывает дублирующиеся элементы в соответствии с лайками. То есть, если пост получил 3 лайка, то он показывает этот пост повторно.
models.py
class BlogPost(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=1000)
body = models.CharField(max_length=1000)
likes = models.ManyToManyField(User, related_name='likes')
template_tags.py
from django import template
register = template.Library()
@register.filter
def sort(queryset, order):
return queryset.order_by(order)
views.py
def posts(request):
posts = BlogPost.objects.filter(user=request.user)
context = {'posts':posts}
return render(request, 'posts.html', context)
posts.html
{% load template_tags %}
{% for post in posts|sort:'likes' %}
{{post.title}}
{% endfor %}
Я также пробовал использовать distinct()
в обоих template_tags.py
и views.py
, но это не влияет на запрос.
Любая помощь будет очень признательна. Спасибо
Следующее должно работать для получения желаемого упорядочивания из представления
from django.db.models import Count
def posts(request):
posts = BlogPost.objects.filter(
user=request.user
).annotate(
count_likes=Count('likes')
).order_by('count_likes').distinct()
context = {'posts':posts}
return render(request, 'posts.html', context)
Ваш фильтр sort
бесполезен, когда вам нужно отсортировать по аннотации. Я не уверен, что фильтр вообще полезен, упорядочивание должно выполняться в представлении