加载django夹具时出错
我有两套装置,Person.json和Movies.json。人员夹具基本上具有以下格式:加载django夹具时出错,django,django-models,django-fixtures,Django,Django Models,Django Fixtures,我有两套装置,Person.json和Movies.json。人员夹具基本上具有以下格式: { "pk": 1, "model": "data.Person", "fields": { "full": "Anna-Varney", "num": "I", "short": "Anna-Varney" } }, 我先把它装进去,没问题。My movie.json如下所示: { "pk": 1, "mo
{
"pk": 1,
"model": "data.Person",
"fields": {
"full": "Anna-Varney",
"num": "I",
"short": "Anna-Varney"
}
},
我先把它装进去,没问题。My movie.json如下所示:
{
"pk": 1,
"model": "data.Film",
"fields": {
"date": "2005-08-01",
"rating": 8.3,
"actors": [
[
"Anna-Varney"
]
],
"name": "Like a Corpse Standing in Desperation (2005) (V)"
}
},
在中加载电影装置会产生以下错误:
DeserializationError: Problem installing fixture 'data/fixtures/movies.json': Person matching query does not exist.
我的模型是:
class PersonManager(models.Manager):
def get_by_natural_key(self, full):
return self.get(full=full)
class Person(models.Model):
objects = PersonManager()
full = models.CharField(max_length=100,unique = True)
short = models.CharField(max_length=100)
num = models.CharField(max_length=5)
def natural_key(self):
return (self.full,)
def __unicode__(self):
return self.full
class Film(models.Model):
name = models.TextField()
date = models.DateField()
rating = models.DecimalField(max_digits=3 , decimal_places=1)
actors = models.ManyToManyField('Person')
def __unicode__(self):
return self.name
我在过去加载过类似的模型和装置,但我正试图重构一些代码,所以现在它不起作用。我所做的一个显著的改变是,我使用PostgreSQL而不是MySQL,并且我在virtualenv中运行一切。
有没有办法确定夹具中发生错误的位置?我不太熟悉在转储数据时创建自然键,但是为什么movie.json中的actors键是嵌套列表?这不应该是一张单子吗。也许可以尝试在Person上的natural_key函数中只返回全名而不是元组,因为电影中有一个所有演员的列表。它必须是一个元组,才能有效,即使是在文档中,我想我找到了问题所在。在过去,当我使用MySQL时,我省略了在创建fixture时具有不同大小写的重复名称,因为我会得到关于重复条目的错误,但我只是了解到PostGres对于字符串比较是区分大小写的。我也有同样的问题,但我没有使用正确的JSON python,例如,None应该为null。列表的最后一个元素后不允许有逗号,False必须为False。