python - serialize - Django se serializa a JSON
json django example (6)
Tengo un modelo (programa) de Django con la clase de entidad, que es el padre de Activity
, que es el padre del 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 secundarios como parte del archivo JSON?
Antes de hacer la serialización, al recuperar sus objetos, para preservar las relaciones, use select_related () para obtener hijos, nietos, etc.
ver http://docs.djangoproject.com/en/dev/ref/models/querysets/
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 ser capaz de simplemente reemplazar serializadores Django estándar con esto y trabajar lejos.
Ahora uso django-piston. Esto hace el truco.
Me parece que la pregunta que estaba haciendo el afiche 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 el padre-hijo-nieto (no herencia, sino una relación de uno a muchos). Si esta no era la intención del póster inicial, me disculpo ... pero si es así, también me gustaría obtener la respuesta.
puedes hacer esto en simples dos líneas de código:
from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())