Django 1.4.1和在反序列化中使用自然键
在Django关于反序列化的文档之后,在我的Django 1.4.1和在反序列化中使用自然键,django,django-models,deserialization,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_lengt
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创建了一个fixture,“Person.json”
对于Book,“Book.json”
装置保存在“装置”文件夹中
然后我执行python manage.py sql myapp
和python manage.py syncdb
,然后执行python manage.py loaddata persondata.json
。这很有效。(我可以在管理页面上看到输入的数据,并收到一条很好的插入计数消息。)
然后我执行python manage.py loaddata bookdata.json,得到以下错误消息:
反序列化错误:[u''[u'josh']'值必须是整数。“]
这怎么可能?为什么Django在我声明了PersonManager
时坚持我使用整数作为主键?我错过了什么
(注意,当我直接将作者
主键
作为整数时,这一切都可以正常工作。)您的管理器方法的名称错误。它应该是get_by__natural_key
而不是get_by_unique_key
我的错,我想把另一个标记为这个的副本。另一个问题有一个公认的答案,所以我想确保这个问题提到了那个。已删除标志,但以下是可能的重复:
[
{
"pk": null,
"model": "myapp.person",
"fields": {
"name": "josh",
}
}
]
[
{
"pk": null,
"model": "myapp.book",
"fields": {
"title": "my book",
"author": ["josh"]
}
}
]