Как фильтровать divs по имени модели в Django
У меня есть страница "Мое избранное" со списком избранных статей. Пользователи могут добавлять в избранное объекты из 3 моделей: статья, вопрос, видео. Мне нужен фильтр по моделям, чтобы после нажатия на кнопку сайт отображал только соответствующие карточки. Я использую Bootstrap 5.
Примером такой логики является здесь, однако, я не вижу никакой возможности выбрать 2 категории (в моем случае модели).
Каждая кнопка должна быть связана с каждой моделью, так что если я нажимаю вопрос, то появляются только заголовки из вопроса, если статью, то только из статьи, если я нажимаю статью и вопрос, то получаю карточки из этих двух моделей. Я также хочу иметь опцию Show all.
models.py
class Article(models.Model):
author = models.ForeignKey(User, blank=True, null=True, on_delete=models.DO_NOTHING)
title = models.CharField(max_length=200)
...
class Meta:
verbose_name = 'article'
class Question(models.Model):
author = models.ForeignKey(User, blank=True, null=True, on_delete=models.DO_NOTHING)
title = models.CharField(max_length=200)
class Meta:
verbose_name = 'question'
class Video(models.Model):
author = models.ForeignKey(User, blank=True, null=True, on_delete=models.DO_NOTHING)
title = models.CharField(max_length=200)
...
class Meta:
verbose_name = 'video'
views.py
class FavouriteList(LoginRequiredMixin, ListView):
login_url = 'login'
redirect_field_name = 'login'
template_name = 'hal/Favourites.html'
model = Article
queryset = Article.objects.all()
def get_context_data(self, **kwargs):
context = super(FavouriteList, self).get_context_data(**kwargs)
tags = Tag.objects.all().values('name', 'slug')
user = self.request.user
favourite_articles = user.favourite_article.all()
favourite_question = user.favourite_question.all()
favourite_video = user.favourite_video.all()
context['favourite_articles'] = favourite_articles
context['favourite_question'] = favourite_question
context['favourite_video'] = favourite_video
context['tags'] = tags
return context
Favourites.html
{% block body %}
Choices:
<div id="myBtnContainer">
<button class="btn"> Show all</button>
<button class="btn"> Question</button>
<button class="btn"> Video</button>
<button class="btn"> Article</button>
</div>
{% if favourite_qa %}
<section class=" py-1">
<div class="row">
{% for qa in favourite_qa %}
<div class="col-4">
<div class="card w-100">
<a href="{{ qa.get_absolute_url }}"><div class="card-title"><strong>{{qa.title}}</strong></div></a>
</div>
</div>
{% endfor %}
</div>
</section>
{% endif %}
{% if favourite_video %}
<section class="py-1">
{% comment %} <h2>Amazing tutorials</h2>
<hr> {% endcomment %}
<div class="row">
{% for video in favourite_video %}
<div class="col-4">
<div class="card w-100 ">
<a href="{{ video.get_absolute_url }}"><div class="card-title"><strong>{{video.title}}</strong></div></a>
</div>
</div>
{% endfor %}
</div>
</section>
{% endif %}
{% if favourite_articles %}
<section class="py-1">
<div class="row">
{% for article in favourite_articles %}
<div class="col-4">
<div class="card w-100">
<a href="{{ article.get_absolute_url }}"><div class="card-title"><strong>{{article.title}}</strong></div></a>
</div>
</div>
{% endfor %}
</div>
</section>
{% endif %}
{% endblock body %}
Вопрос
Какой лучший подход для фильтрации карточек по модели? Могу ли я сделать это из файла view.py? Если да, то как?