Как сериализовать и десериализовать 2 связанные модели в Django? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть 2 модели Django:

from django.db import models

class PersonManager(models.Manager):
    def get_by_natural_key(self, first_name, last_name):
        return self.get(first_name=first_name, last_name=last_name)

class Person(models.Model):
    objects = PersonManager()

    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    birthdate = models.DateField()

    class Meta:
        unique_together = (('first_name', 'last_name'),)

    def natural_key(self):
        return (self.first_name, self.last_name)

class Book(models.Model):
    name = models.CharField(max_length=100)
    author = models.ForeignKey(Person, on_delete=models.CASCADE)

    def natural_key(self):
        return self.name, self.author.natural_key()
    natural_key.dependencies = ['example_app.person']

когда я сериализую его: serializers.serialize ('json', Book.objects.all (), use_natural_foreign_keys = True, use_natural_primary_keys = True)

Возвращает что-то вроде этого:

...
{
    "pk": 1,
    "model": "store.book",
    "fields": {
        "name": "Mostly Harmless",
        "author": ["Douglas", "Adams"]
    }
}
...

Теперь, когда я беру этот JSON и пытаюсь десериализовать и сохранить его в другой БД, которая НЕ имеет записи в модели Person, соответствующей "Douglas", "Adams":

deserialized_objects = serializers.deserialize("json", data)
for deserialized_object in deserialized_objects:
    deserialized_object.save()

будет выдано сообщение о том, что «соответствующий запрос не существует», поскольку он не нашел запись, соответствующую [«Дуглас», «Адамс»] в модели Person, на которую указывают данные этой Книги.

Возможно ли десериализовать сохранение для создания записей в связанной модели? Например, если запись в книге относится к человеку, а этот человек не существует, десериализация должна создать эту запись в модели Person.

Как мне этого добиться? Как сохранить записи в 2 связанных моделях с одним файлом JSON?

СПРАВКА: https://docs.djangoproject.com/en/1.11/topics/serialization/

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