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

时间:2012-03-11 10:53:45

标签: 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,“book.json”,

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

灯具保存在'灯具'文件夹中。

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

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

DeserializationError: [u"'[u'josh']' value must be an integer."]

怎么会这样?当我宣布PersonManager时,为什么Django坚持使用整数作为主键?我错过了什么?

(注意:当我将author pk直接作为整数提供时,这一切都正常。)

1 个答案:

答案 0 :(得分:1)

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