Как сделать итерацию по полю ManyToMany в теге шаблона Django?
Итак, у меня есть объект, содержащий поле Many-to-Many. Я пытаюсь итерировать это поле в шаблоне Django, но, видимо, не могу. Позвольте мне сначала показать вам код.
модель
class Book(models.Model):
title = models.CharField(max_length = 100, blank=True)
category = models.ManyToManyField(Category)
def __str__(self):
return self.title
views.py
def book_list(request):
books = Book.objects.all().order_by('-pk')
context = {
'books' : books,
}
return render(request, 'contents/book_list.html', context)
Теперь шаблон.
{% for b in books %}
<div>
{{c.title}}
{% for cat in b.category %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
Теперь я получаю 'ManyRelatedManager' object is not iterable ошибку. Как мне итерировать поле и показать все category в каждом объекте? Спасибо.
Потому что если вы вызываете b.category, то возвращается только объект отношения. Чтобы получить его значения (объекты category), необходимо добавить .all. Например, так:
{% for b in books %}
<div>
{{ b.title }}
{% for cat in b.category.all %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
btw. Я также изменил c.title на b.title, потому что я предполагаю, что вам нужно это название книги, а не что-то глобальное :)