【问题标题】:Django 1.4.1 and using natural keys in deserializingDjango 1.4.1 并在反序列化中使用自然键
【发布时间】:2012-03-11 10:53:44
【问题描述】:

按照关于反序列化的 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.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 直接作为整数给出时,这一切正常。)

【问题讨论】:

  • 我的错,我打算将另一个标记为与此重复。另一个问题有一个公认的答案,所以我想确保这个问题有参考。已删除标志,但这里是已回答的可能重复项:stackoverflow.com/questions/12577446/…

标签: django django-models deserialization


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2021-04-08
    • 2015-03-30
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多