DjangoTypeError: objeto 'RelatedManager' no se Iterable
tengo siguientes modelos:
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
decir, bloquear b1 tiene G1 grupo. Por su nombre quiero obtener todos los bloques del grupo g1. Escribí siguiente función recursiva:
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
pero b1.group.block_set me vuelve RelatedManager objeto, que no es iterable.
¿Qué hacer? ¿Qué pasa?
¿Alguien sabe por qué RelatedManager no está hecho para ser iterable? Hubiera esperado que fuera de esa manera ... – stalepretzel
Este comentario es un poco tarde, pero el razonamiento es que puede usar los métodos de filtrado en el administrador para restringir la consulta antes de realizar una búsqueda al db. – ovangle
@stalepretzel, porque funciona exactamente como un administrador de django estándar. No llama a Model.objects e itera sobre él. Llamas a Model.objects.all() y luego iteras. Django manager =/= Django queryset. – Saturnix