Ответ 1
Теперь я использую джанго-поршень. Это делает трюк.
У меня есть модель Django (расписание) с классом entity, который является родительским элементом Activity
, который является родительским элементом Event
.
class Entity(models.Model):
<...>
class Activity(models.Model):
<...>
team_entity = models.ForeignKey(Entity)
<...>
class Event(models.Model):
<...>
activity = models.ForeignKey(Activity)
<...>
Как я сериализую и получаю как дочерний объект, так и грандиозные дети как часть файла JSON?
Теперь я использую джанго-поршень. Это делает трюк.
Прежде чем выполнять сериализацию, при поиске объектов, чтобы сохранить отношения, используйте select_related() для получения детей, внуков и т.д.
см. http://docs.djangoproject.com/en/dev/ref/models/querysets/
Мне кажется, что вопрос, который задавал плакат, заключался в том, чтобы получить результат:
Например, начиная с этих моделей:
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)
Результат в 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"
}
]
}
]
}
Таким образом, сохранение родительского-дочернего внука (не наследования, а взаимного отношения "один ко многим" ). Если это не было первоначальным плакатным намерением, я извиняюсь... но если так, я бы тоже хотел ответить на этот вопрос.
Посмотрите на сериализацию унаследованных моделей и объектов из документации Django, доступную по адресу http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models
Это должно решить вашу проблему.
Я считаю, что вы можете найти свой ответ здесь: http://code.djangoproject.com/ticket/4656
Это станет частью сериализаторов django на определенном этапе. Прямо сейчас он должен иметь возможность просто заменить стандартные сериализаторы django этим и работать.
вы можете сделать это в простых двух строках кода:
from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())