2012-03-11 4 views
3

をデシリアライズで自然キーを使用しては、私のmodels.pyに私は、クラスを作成しました:ジャンゴ1.4.1とデシリアライズにDjangoのドキュメントに続き

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あります'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が主張していますか?私は何を逃したのですか? (私は整数として直接authorpkを与えたときにこれがすべて正常に動作しているNB。。)

+0

私の悪い、私はこれの複製としてもう一つをマークするつもりだった。もう1つの質問には回答があったので、これを参考にしたいと思っていました。フラグは削除されましたが、ここでは重複している可能性のある重複があります:http://stackoverflow.com/questions/12577446/django-natural-key-for-fixtures-give-deserialization-error – Gady

答えて

1

あなたのマネージャーの方法が間違った名前を持っています。 get_by_unique_keyではなく、get_by_natural_keyでなければなりません。

+0

良い点は、ここに入力してください。 – SK9

関連する問題