【问题标题】:Django tests loading fixtures auth.groupDjango 测试加载夹具 auth.group
【发布时间】:2018-02-07 08:11:39
【问题描述】:

当我运行 django 测试时出现错误:

IntegrityError: 安装夹具时出现问题 ... ContentType 匹配 查询不存在。: (auth.group:pk=2) field_value 是 '[u'add_corsmodel', u'corsheaders', u'corsmodel']'

我通过做得到固定装置

python manage.py dumpdata --natural-foreign --exclude=contenttypes --exclude=auth.Permission

我该如何解决这个问题?我应该排除其他表格吗?

【问题讨论】:

  • 如果我删除所有 Group 对象,然后进行夹具更新,它可以正常工作。
  • 如何加载夹具?在 Django 中加载固定装置有多种可能的方法。添加一个简单的测试用例来重现您的问题的错误就可以了。
  • @Louis 当我运行测试时,夹具会自动加载

标签: django django-testing


【解决方案1】:

好吧,我尝试做一件简单的事情来添加权限。 我创建了一个 .json 文件并输入了数据。

[
  {
    "model": "auth.group",
    "fields": {
      "name": "foo",
      "permissions": [
        29,45,46,47,48 //permission ID's created in auth.group
      ]
    }
  },
  {
    "model": "auth.group",
    "fields": {
      "name": "new_grp",
      "permissions": [
        29,45,46,47,48
      ]
    }
  }
]

这是我想要包含的初始权限,然后

 manage.py loaddata <myJsonFIle>

我认为在您的情况下,它无法在表中找到行或列,这就是它显示 IntegrityError 的原因

【讨论】:

    【解决方案2】:

    从您的夹具中删除组可以解决您的问题 因为 Group 依赖于 Permission,而 ContentType 依赖于 ContentType,这两者都已从导出中剥离。

    从您在这个问题上的 cmets 来看,听起来您已经弄清楚了那部分。不过,您的问题还有另一个答案:不要在 Django 中对测试数据使用固定装置。 Django 的文档建议您使用TestCase.setUpTestData 方法来设置您的测试数据。这是文档中的作用:"Tests are more readable and it’s more maintainable to create objects using the ORM."

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-12
      • 2011-06-07
      • 2013-10-24
      • 2011-04-16
      • 2013-08-24
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多