Следуя документации 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 myapp
и python 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
? Что я пропустил?
(NB. Это все работает нормально, когда я даю author
pk
непосредственно как целое число.)