Tengo un modelo de datos de Django como esto (campos de datos omitidos):Django QuerySets anidados
class Atom(Model):
pass
class State(Model):
atom = ForeignKey(Atom)
class Transition(Model):
atom = ForeignKey(Atom)
upstate = ForeignKey(State,related_name='uptrans')
lostate = ForeignKey(State,related_name='lotrans')
Cuando consulta, los campos a ser restringido puede estar en uno u otro modelo, por lo que es más fácil de consultar en Transition.objects.filter(...)
ya que todos los campos en los otros modelos se pueden alcanzar a través de las claves externas. Llamemos al QuerySet resultante t
.
Ahora lo que quiero además es un QuerySet a
del modelo Atom que corresponde a t
, que se puede hacer como a = t.values('atom').distinct()
. Hasta aquí todo bien.
Sin embargo, también quiero cada una de las entradas en a
tener uno atributo/campo que contiene el QuerySet de los Estados de este átomo, que refleja todavía los criterios en la selección original t
, a través de uno cualquiera de los upstate
o lostate
ForeignKeys.
He creado mi QuerySet de los Estados hasta ahora por más de un bucle t
, añadiendo el values('upstate_id')
y values('lostate_id')
a una pitón set()
para tirar duplicados, y luego consultar Unidos con esta lista. Pero entonces no puedo lograr la estructura anidada de Estados dentro de los Átomos.
Cualquier sugerencia sobre cómo hacerlo es bienvenida, si es posible con QuerySet
s no evaluado, ya que los paso no a una plantilla sino a un generador (yield
declaraciones), que es una buena forma de transmitir grandes cantidades de datos.