Django сериализуется в JSON

У меня есть модель 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?

Ответы

Ответ 1

Теперь я использую джанго-поршень. Это делает трюк.

Ответ 2

Прежде чем выполнять сериализацию, при поиске объектов, чтобы сохранить отношения, используйте select_related() для получения детей, внуков и т.д.

см. http://docs.djangoproject.com/en/dev/ref/models/querysets/

Ответ 3

Мне кажется, что вопрос, который задавал плакат, заключался в том, чтобы получить результат:

Например, начиная с этих моделей:

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"
                }
            ]
        }
    ]
}

Таким образом, сохранение родительского-дочернего внука (не наследования, а взаимного отношения "один ко многим" ). Если это не было первоначальным плакатным намерением, я извиняюсь... но если так, я бы тоже хотел ответить на этот вопрос.

Ответ 5

Я считаю, что вы можете найти свой ответ здесь: http://code.djangoproject.com/ticket/4656

Это станет частью сериализаторов django на определенном этапе. Прямо сейчас он должен иметь возможность просто заменить стандартные сериализаторы django этим и работать.

Ответ 6

вы можете сделать это в простых двух строках кода:

from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())