Джанго сериализуется в JSON - PullRequest
15 голосов
/ 06 января 2009

У меня есть модель (расписание) Django с классом сущности, который является родителем Activity, который является родителем Event.

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

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

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

Как мне сериализовать и получить дочерний объект и внучатых как часть файла JSON?

Ответы [ 6 ]

10 голосов
/ 06 января 2009

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

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

7 голосов
/ 28 мая 2009

Я сейчас использую Джанго-поршень. Это делает трюк.

5 голосов
/ 06 января 2009

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

Например, начиная со следующих моделей:

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

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

3 голосов
/ 06 февраля 2009

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

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

3 голосов
/ 06 января 2009

Посмотрите на сериализацию унаследованных моделей и объектов из документации Django, доступной по адресу http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models

Это должно решить вашу проблему.

0 голосов
/ 04 декабря 2012

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

from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...