按照有关反序列化的 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 myapp
和python 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/