如何在Django中对2个相关模型进行序列化和反序列化?

时间:2019-05-24 06:27:44

标签: django

我有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/

0 个答案:

没有答案