类型错误: 'RelatedManager' 对象不是可迭代
问题描述:
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
说,阻止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对象,这是不迭代。
怎么办?怎么了?
答
试试这个:
block in group.block_set.all()
有谁知道为什么RelatedManager不能被迭代?我本来以为是这样...... – stalepretzel 2013-11-18 00:33:56
这个评论有点晚,但推理是你可以在管理器上使用过滤方法来限制查询,然后再执行对数据库的提取。 – ovangle 2015-03-20 14:45:51
@stalepretzel,因为它和标准的Django管理器完全一样。您不要调用Model.objects并遍历它。你调用Model.objects.all()然后迭代。 Django manager =/= Django queryset。 – Saturnix 2015-11-18 22:40:59