Я новичок в django и вообще в программировании. А сейчас я пишу свой первый проект - это будет мой личный блог, он почти готов, за исключением одной функции: у меня есть список категорий, показанный на странице в правой панели.
1) Вопрос в том, как я могу сортировать / фильтровать свои сообщения по этим категориям? Я имею в виду, что я хочу нажать на одну из этих категорий в правой панели и увидеть сообщения, в которых упоминается эта категория (возможно, в сообщении несколько категорий).
Я перепробовал много комбинаций, которые нашлив стеке, но я не делал этого раньше, поэтому не могу понять, как реализовать эту функцию в моем проекте.
models.py
class Category(models.Model):
title = models.CharField(max_length=20)
def __str__(self):
return self.title
class Post(models.Model):
title = models.CharField(max_length=100)
overview = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
content = HTMLField('Content')
author = models.ForeignKey(Author, on_delete=models.CASCADE)
thumbnail = models.ImageField()
categories = models.ManyToManyField(Category)
featured = models.BooleanField()
previous_post = models.ForeignKey('self', related_name='previous', on_delete=models.SET_NULL, blank=True, null=True)
next_post = models.ForeignKey('self', related_name='next', on_delete=models.SET_NULL, blank=True, null=True)
def __str__(self):
return self.title
views.py
def filter_by_category(request):
post_list = Post.objects.filter(categories=)
context = {
'post_list': post_list
}
return render(request, 'post_by_category.html', context)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', index),
path('blog/', blog, name='post-list'),
path('search/', search, name='search'),
path('blog/filter_by_category/', filter_by_category, name='filter_by_category'),
path('subscribe/', email_list_signup, name='subscribe'),
path('create/', post_create, name='post-create'),
path('post/<id>/', post, name='post-detail'),
path('post/<id>/update/', post_update, name='post-update'),
path('post/<id>/delete/', post_delete, name='post-delete'),
path('tinymce/', include('tinymce.urls')),
path('accounts/', include('allauth.urls')),
sidebar.html
<div class="widget categories">
<header>
<h3 class="h6">Categories</h3>
</header>
{% for cat in category_count %}
<div class="item d-flex justify-content-between">
<a href="{% url 'filter_by_category' %}">{{ cat.categories__title }}</a><span>{{ cat.categories__title__count }}</span></div>
{% endfor %}
</div>
Данный код не работает, я знаю, что проблема в views.py. Я совершенно запутался, как правильно написать. Помогите, пожалуйста, решить эту проблему.
ОБНОВЛЕНО: Решено, большое спасибо Landcross. Я был близок в этом моменте к этому решению, но все испортил. Спасибо!