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?

¿Fue útil?

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())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top