2011-06-11 1 views
40

장고형식 오류 :

을 반복 가능한하지 않는 '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에서 얻고 싶습니다. 나에게 반복 가능한 아니다 RelatedManager 객체를 반환

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 : 나는 다음 재귀 함수를 썼다.

어떻게해야합니까? 뭐가 문제 야?

답변

98

이 시도 :

block in group.block_set.all() 
+4

어쨌든 RelatedManager가 반복 가능하도록 만들어지지 않은 이유를 알고 있습니까? 나는 그것이 그 방법이 될 것으로 기대했을 것입니다 ... – stalepretzel

+0

이 코멘트는 조금 늦었습니다.하지만 추론은 DB에 가져 오기를 수행하기 전에 쿼리를 제한하기 위해 관리자의 필터링 방법을 사용할 수 있다는 것입니다. – ovangle

+5

@stalepretzel. 표준 장고 관리자와 똑같이 작동하기 때문입니다. Model.object를 호출하지 않고 반복합니다. Model.objects.all()을 호출하고 반복합니다. 장고 관리자 =/장고 쿼리 집합. – Saturnix

18

like a Manager를 사용합니다. 모든 객체를 원하면 all() 메서드를 호출하십시오.