Django TypeError:“RelatedManager”对象不可迭代

5tmbdcev  于 2023-05-08  发布在  Go
关注(0)|答案(4)|浏览(155)

我有这些Django模型:

class Group(models.Model):
    name = models.CharField(max_length=100)
    parent_group = models.ManyToManyField("self", blank=True)
    
    def __unicode__(self):
        return self.name

class Block(models.Model):
    
    name = models.CharField(max_length=100)
    app = models.CharField(max_length=100)
    group = models.ForeignKey(Group)

    def __unicode__(self):
        return self.name

假设块b1具有g1组。通过它的名字,我想从组g1中获取所有块。我写了这个递归函数:

def get_blocks(group):
    
    def get_needed_blocks(group):
        for block in group.block_set:
            blocks.append(block)

        if group.parent_group is not None:
            get_needed_blocks(group.parent_group)

    blocks = []
    get_needed_blocks(group)
    return blocks

b1.group.block_set返回的是RelatedManager对象,该对象不可迭代。
我做错了什么,我该如何解决?

q9yhzks0

q9yhzks01#

试试这个:

block in group.block_set.all()
7jmck4yq

7jmck4yq2#

使用like a Manager。如果需要所有对象,则调用all()方法。

bvjveswy

bvjveswy3#

你必须使用.all()与相关的名称或childModel_set模型名称。
在www.example.com中views.py用途:

for item in object.relatedname.all():
    do something ......

在html模板中用途:

{% for item in object.relatedname.all %}
   do something ......
 {% endfor %}
11dmarpk

11dmarpk4#

如果您在Django模板中遇到此错误,请尝试:

{% for block in group.block_set.all %}
{{ block }}
{% endfor %}

相关问题