2011-06-11 141 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()方法。

相關問題