Django serializza su JSON
Domanda
Ho un modello Django (programma) con la classe di entità, che è il genitore di Activity
, che è il genitore di Event
.
class Entity(models.Model):
<...>
class Activity(models.Model):
<...>
team_entity = models.ForeignKey(Entity)
<...>
class Event(models.Model):
<...>
activity = models.ForeignKey(Activity)
<...>
Come posso serializzare e ottenere sia l'oggetto figlio che i figli maggiori come parte del file JSON?
Soluzione 2
Ora uso django-piston. Questo è il trucco.
Altri suggerimenti
Prima di eseguire la serializzazione, durante il recupero dei tuoi oggetti, per preservare le relazioni usa select_related () per ottenere figli, nipoti, ecc.
vedi http://docs.djangoproject.com/en/dev/ rif / modelli / querysets /
Mi sembra che la domanda posta dal poster fosse quella di finire con un risultato come:
Ad esempio, a partire da questi modelli:
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)
Risultato in 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"
}
]
}
]
}
Mantenendo così il genitore-figlio-nipote (non ereditarietà, ma attraversamento di relazioni uno-a-molti). Se questa non era l'intenzione del poster iniziale, mi scuso ... ma in tal caso vorrei anche la risposta a questo.
Dai un'occhiata alla serializzazione di modelli e oggetti ereditati dalla documentazione di Django disponibile su http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models
Questo dovrebbe risolvere il tuo problema.
Credo che tu possa trovare la tua risposta qui: http://code.djangoproject.com/ticket/ 4656
Questo diventerà parte dei serializzatori di django ad un certo punto. In questo momento dovrebbe essere in grado di sostituire semplicemente i serializzatori standard di django con questo e lavorare via.
puoi farlo in due semplici righe di codice:
from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())