У меня есть 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/