Django serialize para JSON
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?
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())