Pergunta

Eu tenho um modelo Django (cronograma) com a classe de entidade, que é o pai de Activity, que é o pai de Event.

class Entity(models.Model):
    <...>

class Activity(models.Model):
    <...>
    team_entity = models.ForeignKey(Entity)
    <...>   

class Event(models.Model):
    <...>
    activity = models.ForeignKey(Activity)
    <...>

Como posso serializar e obter tanto o objeto filho e netos como parte do arquivo JSON?

Foi útil?

Solução 2

Eu agora uso django-pistão. Isso faz o truque.

Outras dicas

Antes de fazer a serialização, ao recuperar seus objetos, para preservar as relações usam select_related () para obter filhos, netos, etc

http://docs.djangoproject.com/en/dev/ ref / modelos / querysets /

Parece-me que a questão o cartaz estava pedindo era para acabar com um resultado como:

Por exemplo, começando com estes 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 em 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"
                }
            ]
        }
    ]
}

Assim, mantendo o pai-filho-neto (não inheritence, mas um-para-muitos relação travessia). Se este não era a intenção do cartaz inicial, peço desculpas ... mas se assim que eu gostaria que a resposta para isso também.

Tenha um olhar para a serialização de modelos e objetos herdados da documentação Django disponível em http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models

Isso deve resolver o seu problema.

Eu acredito que você pode encontrar a sua resposta aqui: http://code.djangoproject.com/ticket/ 4656

Isso vai se tornar parte do Django serializers em algum momento. Agora ele deve ser capaz de substituir apenas serializers Django padrão com isso e trabalho de distância.

Você pode fazer isso em simples duas linhas de código:

from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top