所以我有一个 Film 模型,其中包含多对多领域的 Actors 模型列表:
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
但我仍然遇到同样的错误