【问题标题】:Django Test Complaining about FixtureDjango测试抱怨夹具
【发布时间】:2013-10-25 06:49:14
【问题描述】:

转储数据python manage.py dumpdata --format json --indent 4 --exclude auth.permission --exclude contenttypes > app/fixtures/app_test_data.json

运行 python manage.py 测试应用程序,我得到以下错误:

IntegrityError: Problem installing fixtures: The row in table 'django_admin_log' with       primary key '517' has an invalid foreign key: django_admin_log.content_type_id contains a value '28' that does not have a corresponding value in django_content_type.id.

有什么想法吗?我在使用 dumpdata/Django 的测试运行器时遇到过很多类似的问题。

【问题讨论】:

  • 在您进行数据转储时尝试 --natural 以便使用自然键而不是数据库 ID? docs.djangoproject.com/en/dev/ref/django-admin/…
  • 这很可能是由于您的灯具被创建的顺序而发生的。 Django 试图在创建content_type 之前创建'django_admin_log',从而导致关系破裂。您可以尝试重新排序固定装置的创建方式以解决此问题。

标签: django django-models django-testing django-fixtures


【解决方案1】:

如果您在示例中排除 contenttype 应用程序,您可能无法导出任何具有针对该应用程序的外键的应用程序。删除 --exclude contenttypes 可能会使其工作。

【讨论】:

  • 我和 OP 有同样的问题,从未使用过排除。如果我执行dumpdata 他们,content_type 仍然没有导出到 json(或 yaml)中。即./manage.py dumpdata --format=json | python -m json.tool | grep content_type不输出任何content_type定义。
  • @Herbert:请为此开始一个新话题。
  • 对不起,我的意思不是要开始一个新话题,而是要声明我怀疑 --exclude-option 解决了 OP,因为没有 content_type 被倾倒有或没有 - -排除选项。我认为解决方案是使用--natural-foreign--natural-primary 选项,但我不确定,所以我不会将其发布为答案。在我看来,django 神奇地导入了一些东西,比如用于多态行为的 content_type。它们不需要明确包含在固定装置中。这种魔法和转储之间的 ID 可能不同,--natural-... 以某种方式解决了这个问题。但我不知道细节。
  • @Herbert 我也不确定。显式删除要转储另一个应用程序所需的应用程序似乎是一个明显的问题。但是,让我们在这里留下我的答案和您的评论,也许它会在将来的某个时候对某人有所帮助。
  • 我编辑了您的答案以突出这种不确定性,感谢您的努力!
【解决方案2】:

如果:

  1. 您只是想从知道此问题之前生成的 json 中恢复信息
  2. 您不关心管理日志的数据
  3. 您(或其他人)使用如下命令生成了 json,不包括 auth.permission 和 contenttypes:python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

您可以使用文本编辑器恢复捕获在 json 中的信息,打开文件并删除与 admin.logentry 模型关联的元素。

这对我有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2023-01-04
    • 2018-02-07
    相关资源
    最近更新 更多