Как удалить дубликаты тегов?
В выпадающем списке повторяются и отображаются одни и те же теги. Он перебирает теги, используемые в каждом сообщении, но не проверяет, повторяются ли теги или нет. Есть ли способ избежать этого повторения? Мой выпадающий список выглядит следующим образом:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Tags
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
{% for post in posts %}
{% for tag in post.tags.all %}
<a class="dropdown-item" href="{% url 'post_tag' tag.slug %}">
{{ tag.name }}
</a>
{% endfor %}
{% endfor %}
</div>
</div>
views.py
def home(request, tag_slug=None):
posts = Post.objects.all()
#tag post
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
posts = posts.filter(tags__in=[tag])
return render(request, 'blog/home.html', {'posts':posts})
Я спрашивал здесь и спрашиваю снова . Мне нужна ваша помощь.
попробуйте это
models.py
from django.db import models
class Post(models.Model):
tags = models.ManyToManyField(
'post.Tag',
related_name='posts',
)
...
class Tag(models.Model):
...
views.py
def home(request, tag_slug=None):
posts = Post.objects.all()
#tag post
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
posts = posts.filter(tags__in=[tag])
# Note that filtered posts are used
tags = Tag.objects.filter(posts__in=posts).distinct()
return render(request, 'blog/home.html', {'posts':posts, 'tags': tags})
home.html
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
{% for tag in tags %}
<a class="dropdown-item" href="{% url 'post_tag' tag.slug %}">
{{ tag.name }}
</a>
{% endfor %}
</div>