我有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()
由于没有找到与Book数据指向的Person模型中的[“ Douglas”,“ Adams”]相对应的条目,因此将给出错误消息,指出“不存在匹配查询”。
是否可以反序列化保存以在相关模型中创建条目?例如,如果书中的条目是指一个人而该人不存在,则反序列化应在“人”模型中创建该条目。
我该如何实现?如何使用一个JSON文件在2个相关模型中保存条目?
参考:https://docs.djangoproject.com/en/1.11/topics/serialization/