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

У меня есть модель (расписание) 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?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
15
0
13 877
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

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

Steven H. 06.01.2009 00:44

умник внизу прав. Я не знал, что вы не использовали select_related () в наборе запросов модели.

Sarat 06.01.2009 01:45

Прежде чем выполнять сериализацию, при извлечении ваших объектов, чтобы сохранить отношения, используйте 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"
                }
            ]
        }
    ]
}

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

Как - конкретно - этого можно достичь?

S.Lott 06.01.2009 14:40

Да, это то, что я ищу. Мне нужна группа сущностей, каждая сущность не будет иметь ни одного ко многим действиям, каждое действие не будет иметь ни одного ко многим событиям. Стивен

Steven H. 06.01.2009 18:19

Это не ответ ... это уточнение вопроса.

Seth Johnson 19.01.2011 08:59

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

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

Ответ принят как подходящий

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

Piston можно найти на bitbucket.org/jespern/django-piston/wiki/Home - «Мини-фреймворк для Django для создания RESTful API. ... Говорит JSON, YAML, Python Pickle и XML (и HATEOAS.)»

Peter Mortensen 26.06.2009 17:12

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

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

Другие вопросы по теме