Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载django夹具时出错_Django_Django Models_Django Fixtures - Fatal编程技术网

加载django夹具时出错

加载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

我有两套装置,Person.json和Movies.json。人员夹具基本上具有以下格式:

  {
    "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。