Pregunta
Tengo un modelo de Django (programación) con la clase de entidad, que es el padre de Activity
, que es el padre de Event
.
class Entity(models.Model):
<...>
class Activity(models.Model):
<...>
team_entity = models.ForeignKey(Entity)
<...>
class Event(models.Model):
<...>
activity = models.ForeignKey(Activity)
<...>
¿Cómo serializo y obtengo tanto el objeto hijo como los nietos como parte del archivo JSON?
Solución 2
Ahora uso django-piston. Esto hace el truco.
Otros consejos
Antes de realizar la serialización, al recuperar sus objetos, para preservar las relaciones, utilice select_related () para obtener hijos, nietos, etc.
consulte http://docs.djangoproject.com/en/dev/ ref / models / querysets /
Me parece que la pregunta que estaba haciendo el cartel era terminar con un resultado como:
Por ejemplo, comenzando con estos modelos:
class Entity(models.Model):
name = models.CharField(...)
class Activity(models.Model):
name = models.CharField(...)
team_entity = models.ForeignKey(Entity)
class Event(models.Model):
name = models.CharField(...)
activity = models.ForeignKey(Activity)
Resultado en JSON:
{
"model": "Entity",
"name": "Dallas Cowboys",
"activities": [
{
"model": "Activity",
"name": "Practice"
},
{
"model": "Activity",
"name": "Game"
"events": [
{
"model": "Event",
"name": "vs Washington Redskins"
},
{
"model": "Event",
"name": "vs Green Bay Packers"
}
]
}
]
}
De este modo, se mantiene al padre-hijo-nieto (no la herencia, sino la relación de uno a muchos). Si esta no fue la intención del cartel inicial, me disculpo ... pero si es así también me gustaría la respuesta a esto.
Eche un vistazo a la serialización de modelos y objetos heredados de la documentación de Django disponible en http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models
Eso debería resolver tu problema.
Creo que puede encontrar su respuesta aquí: http://code.djangoproject.com/ticket/ 4656
Esto se convertirá en parte de los serializadores django en algún momento. En este momento, debería poder simplemente reemplazar los serializadores django estándar con esto y trabajar de inmediato.
puedes hacer esto en dos líneas simples de código:
from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())