сериализация модели Django - PullRequest
0 голосов
/ 17 мая 2011

Я хочу сериализовать модели так:

class Schedule(models.Model):
   Title = models.CharField(max_length=512)

class ScheduleEvent1(models.Model):
   ScheduleContent = models.ForeignKey(Schedule)
   Description = models.TextField()

class ScheduleEvent2(models.Model):
   ScheduleContent = models.ForeignKey(Schedule)
   AnotherField = models.TextField()
   ShortDescription = models.TextField()

сделать что-то вроде serializers.serialize('json', Schedule.objects.all())

Результат лайков

[
{
    "pk": 2,
    "model": "Schedule",
    "fields": {
        "Title": "Some Title",
        "ScheduleEvent1": [
            {
                "pk": 19,
                "model": "ScheduleEvent1",
                "fields": {
                    "Description": "Some Descr",
                }
            },
            {
                "pk": 20,
                "model": "ScheduleEvent1",
                "fields": {
                    "Description": "Some Descr2222",
                }
            }
        ],
        "ScheduleEvent2": [
            {
                "pk": 15,
                "model": "ScheduleEvent2",
                "fields": {
                    "AnotherField": "Some text",
                    "ShortDescription" : "Some text ...",
                }
            }
        ]
    }
}

]

В общем. У меня есть дерево сущностей. И мне нужно сериализовать это дерево от root.

tnx за помощь.

1 Ответ

0 голосов
/ 17 мая 2011

http://docs.djangoproject.com/en/1.3/topics/serialization/#dependencies-during-serialization

Охватывает суть этого.Полученный файл не является точно тем, что требуется, поскольку объекты не будут вложенными.Однако это то, что Django производит по умолчанию, и это то, что Django будет использовать для десериализации.

Если вы используете Piston , вы можете легко определить обработчик, который будет создавать вложенный JSON, но он не будетбыть точно , как показано, потому что JSON-излучатель Piston не точно соответствует формату Django.

Получение точно то, что ожидается, приводит к расширению сериализатора Django для производствавложенный объект JSON в качестве естественного ключа.См. http://code.djangoproject.com/browser/django/trunk/django/core/serializers/python.py. Линии 47-59

Или вы можете определить метод natural_key, который использует Django 'django.core.serializers.json .Serializer` для генерации JSON-сериализации объекта вместокакой-то другой ценности естественного ключа.Это немного странно семантически, но может делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...