У меня есть веб-сайт типа блога, где пользователи могут добавлять теги к своим сообщениям, и я хочу, чтобы люди могли фильтровать по тегам. Вот мой models.py
class Tag(models.Model):
name = models.CharField(max_length=150,unique=True)
def __str__(self):
return self.name
class Post(models.Model):
author = models.ForeignKey(User,related_name='posts',on_delete=models.CASCADE)
title = models.CharField(max_length=75)
text = models.TextField(null=True,blank=True)
tag = models.ManyToManyField(Tag,related_name='tags',blank=True)
Я вырезал множество не относящихся к делу полей модели, чтобы вы не были засыпаны большим количеством текста. Теперь вот мой views.py
class TagFilterView(ListView):
model = Post
template_name = 'mainapp/tags_.html'
def get_queryset(self):
object_list = Post.objects.filter(tags=tag).distinct()
return object_list
Вот мой шаблон URL
path('tag/<int:pk>/',views.TagFilterView.as_view(),name='tag_view'),
И, наконец, вот файл HTML
{% extends 'mainapp/base.html' %}
{% block content %}
<h1>Tags</h1>
{% for post in object_list %}
<h2>{{ post }}</h2>
{% endfor %}
{% endblock content %}
У меня есть перепробовал много разных комбинаций фильтров и тегов фильтров, но это, кажется, самое близкое, я думаю. Поэтому в основном я хочу знать, как я могу фильтровать посты по указанным c тегам, которые они связывают с ними. Так, например, если у поста есть программный тег, а у меня от go до /tag/1
или что-то подобное, он будет фильтровать, поэтому будут показаны только посты с программным тегом.
Что является самым простым способ сделать это?