Django类型错误:'RelatedManager'对象不可迭代

122 投票
4 回答
77111 浏览
提问于 2025-04-16 19:21

我有这些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对象,这个对象不能直接用来遍历。

我哪里做错了,应该怎么修复呢?

4 个回答

17

你需要使用 .all() 方法,配合相关的名称或者子模型的名称。

在 views.py 文件中使用:

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

在 HTML 模板中使用:

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

把它当作一个管理器Manager来用。如果你想要获取所有的对象,就调用all()这个方法。

236

试试这个:

block in group.block_set.all()

撰写回答