Есть ли другой способ передачи параметров поиска в django
Я пытаюсь передать параметр поиска в мой views.py для рендеринга в шаблоны
model.py
class Category(models.Model):
name = models.CharField(max_length=20)
slug = models.SlugField(max_length=200, blank=True, unique=True)
class Post(models.Model):
""""
created_on = models.DateTimeField(auto_now_add=True)
cover = models.ImageField(null=True, blank=True )
categories = models.ManyToManyField(Category, related_name='posts', blank=True)
views.py
def index_category(request, category):
posts = Post.objects.filter(categories__name__contains=category).order_by('-created_on')
context = {
"category": category,
"posts": posts,
}
return render(request, "blog/index_category.html", context)
index_category.html
{% extends "base.html" %}
{% block content %}
<div class="col-md-8 offset-md-2">
<h1>{% block title %}{{ category | title }}{% endblock title %}</h1>
<hr>
{% for post in posts %}
<h2><a href="{% url 'index-detail' post.slug %}">{{ post.title }}</a></h2>
<small>
{{ post.created_on.date }} |
Categories:
{% for category in post.categories.all %}
<a href="{% url 'blog-category' category.name %}">
{{ category.name }}
</a>
{% endfor %}
</small>
<p>{{ post.body | slice:":200" }}...</p>
{% endfor %}
</div>
{% endblock %}
Когда я обновляю localhost на странице категории, он не возвращает ничего, кроме заголовка блока.
Есть ли другой способ фильтровать отношения "многие ко многим" между постом и категорией?
Во избежание будущих проблем с похожими category именами измените следующим образом:
posts = Post.objects.filter(categories__name__contains=category).order_by('-created_on')
вызов отношения: (для которого у вас есть related_name='posts' в поле Post.category)
posts = category.posts.all().order_by('-created_on')
Для получения дополнительной помощи покажите urls.py.
Как передать переменную category в функцию index_category?