だから私は、多対多フィールドでActorsモデルのリストを保持するFilmモデルを持っています:
class Person(models.Model):
full = models.TextField()
short = models.TextField()
num = models.CharField(max_length=5)
class Film(models.Model):
name = models.TextField()
year = models.SmallIntegerField(blank=True)
actors = models.ManyToManyField('Person')
JSON フィクスチャからいくつかの初期データをロードしようとしていますが、問題は多対多のアクター フィールドをロードすることです。たとえば、次のエラーが表示されます。
DeserializationError: [u"'Anna-Varney' 値は整数でなければなりません。"]
これらのフィクスチャで:
{
"pk": 1,
"model": "data.Film",
"fields": {
"actors": [
"Anna-Varney"
],
"name": "Like a Corpse Standing in Desperation (2005) (V)",
"year": "2005"
}
私のアクターのフィクスチャは次のようになります。
{
"pk": 1,
"model": "data.Person",
"fields": {
"full": "Anna-Varney",
"num": "I",
"short": "Anna-Varney"
}
}
したがって、多対多のフィールドは pk 整数を使用する必要がありますが、問題はデータがソートされていないことであり、アクターの長いリストの場合、それぞれの pk を手動で検索するのは実用的ではないと思います。私は解決策を探していましたが、自然キーを使用する必要があるようですが、モデルにそれらを適用する方法が正確にはわかりません。
編集:私は自分のモデルを次のように変更しました:
class PersonManager(models.Manager):
def get_by_natural_key(self, full):
return self.get(full=full)
class Person(models.Model):
objects = PersonManager()
full = models.TextField()
short = models.TextField()
num = models.CharField(max_length=5)
def natural_key(self):
return self.full
しかし、私はまだ同じエラーが発生しています