简体   繁体   English

如何迭代 Django 模板标签中的 ManyToMany 字段?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM