[英]How do I iterate ManyToMany field in Django template tag?
I have an object that contains a Many-to-Many field.我有一个包含多对多字段的 object。 I'm trying to iterate this field in Django template, but apparently I can't.
我试图在 Django 模板中迭代这个字段,但显然我不能。 Let me show you the code first.
我先给你看一下代码。
models.py:模型.py:
class Book(models.Model):
title = models.CharField(max_length = 100, blank=True)
category = models.ManyToManyField(Category)
def __str__(self):
return self.title
views.py:视图.py:
def book_list(request):
books = Book.objects.all().order_by('-pk')
context = {
'books' : books,
}
return render(request, 'contents/book_list.html', context)
Template file:模板文件:
{% for b in books %}
<div>
{{b.title}}
{% for cat in b.category %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
Now I get 'ManyRelatedManager' object is not iterable
error.现在我得到
'ManyRelatedManager' object is not iterable
错误。 How do I iterate the field and show all the category
in each object?如何迭代该字段并显示每个 object 中的所有
category
?
It's because if you call b.category
it returns only the relation object.这是因为如果你调用
b.category
它只返回关系 object。 To get its values ( category
objects) you have to add .all
.要获取其值(
category
对象),您必须添加.all
。 Like this:像这样:
{% for b in books %}
<div>
{{ b.title }}
{% for cat in b.category.all %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
btw.顺便提一句。 I've also changed
c.title
to b.title
, because I assume you want this book title, not something from global:)我还将
c.title
更改为b.title
,因为我假设您想要这本书的标题,而不是来自全球的东西:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.