2012-03-11 30 views
3

繼反序列化Django文檔自然鍵,在我models.py我創建的類:Django的1.4.1和使用反序列化

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 

我還創建了一個夾具人「的人。 JSON」,

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

和圖書, 「book.json」,

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

這些燈具是SAV在'燈具'文件夾中編輯。

然後我做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."]

這怎麼可能是?爲什麼Django堅持使用整數作爲主鍵,當我聲明PersonManager?我錯過了什麼?

(特別注意:這是所有工作正常,當我給authorpk直接爲整數)。

+0

我的不好,我打算把另一個標記爲這個副本。另一個問題有一個可以接受的答案,所以我想確保這個問題有一個參考。刪除標誌,但這裏是答案可能的重複:http://stackoverflow.com/questions/12577446/django-natural-key-for-fixtures-give-deserialization-error – Gady 2014-08-28 00:58:19

回答

1

您的經理方法的名稱有誤。它應該是get_by_natural_key而不是get_by_unique_key

+0

好點,這是一個錯字。 – SK9 2012-04-11 12:03:19