Django 1.4.1 和在反序列化中使用自然键

标签 django django-models deserialization

按照有关反序列化的 Django 文档,在我的 models.py 中,我创建了该类:

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

class Person(models.Model):
    objects = PersonManager()
    name = models.CharField(max_length=30, unique=True, blank=False, null=False)

    def __unicode__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Person)

    def __unicode__(self):
            return self.title

我还为 Person 创建了一个固定装置,“person.json”,

[
    { 
        "pk": null,
        "model": "myapp.person", 
        "fields": {
            "name": "josh",
        }
     }
]

对于书籍,“book.json”,

[
    { 
        "pk": null,
        "model": "myapp.book", 
        "fields": {
            "title": "my book",
            "author": ["josh"]
        }
     }
]

灯具保存在“fixtures”文件夹中。

然后我执行python manage.py sql myapppython manage.pysyncdb,然后python manage.py loaddata persondata.json 。这有效。 (我可以在管理页面上看到输入的数据,并且收到一条良好的插入计数消息。)

然后我执行 python manage.py loaddata bookdata.json 并收到以下错误消息:

反序列化错误:[u"'[u'josh']'值必须是整数。"]

怎么会这样呢?当我声明了 PersonManager 后,为什么 Django 坚持要求我使用整数作为主键?我错过了什么?

(注意。当我直接将 author pk 作为整数给出时,一切正常。)

最佳答案

您的管理器方法名称错误。它应该是 get_by_natural_key 而不是 get_by_unique_key

关于Django 1.4.1 和在反序列化中使用自然键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654325/

相关文章:

python - 警告 : '' not a valid package name; please use only. -setup.py 中不存在分隔包

Django Nginx 和 Gunicorn .sock 失败 (2 : No such file or directory) while connecting to upstream

django - --fake-initial与--fake在Django迁移中?

java - Spring RequestBody 将 JSON 转换为 String

java - 如何使用 Jackson API 对序列化和反序列化使用不同的 JSONProperty?

Django : Count, 多对多字段的分组依据和排序依据

django - 如何使用 django modelform 通过复制/粘贴上传图像?

python - 名称错误 django send_mail

python - 如何在 django 的查询集中使用 If else

android - Android 中的 BinaryFormatter 序列化/反序列化替代方案