Как сделать итерацию по полю 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, потому что я предполагаю, что вам нужно это название книги, а не что-то глобальное :)

Вернуться на верх