2011-06-11 108 views
40

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

我旁边型号:

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 

说,阻止B1G1组。通过它的名字我想要所有块来自群组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对象,这是不迭代。

怎么办?怎么了?

回答

98

试试这个:

block in group.block_set.all() 
+4

有谁知道为什么RelatedManager不能被迭代?我本来以为是这样...... – stalepretzel 2013-11-18 00:33:56

+0

这个评论有点晚,但推理是你可以在管理器上使用过滤方法来限制查询,然后再执行对数据库的提取。 – ovangle 2015-03-20 14:45:51

+5

@stalepretzel,因为它和标准的Django管理器完全一样。您不要调用Model.objects并遍历它。你调用Model.objects.all()然后迭代。 Django manager =/= Django queryset。 – Saturnix 2015-11-18 22:40:59

18

使用它like a Manager。如果你想要所有的对象,然后调用all()方法。

相关问题