django.db.utils.IntegrityError:通过Selenium和Python django执行LiveServerTestCases时,外键约束失败

django.db.utils.IntegrityError:通过Selenium和Python django执行LiveServerTestCases时,外键约束失败,python,selenium,foreign-keys,django-2.1,liveservertestcase,Python,Selenium,Foreign Keys,Django 2.1,Liveservertestcase,我可以成功运行所有单元测试,如果我运行独立的服务器,我甚至可以成功运行selenium测试,但是当我尝试使用LiveServerTestCases以自包含的方式测试所有内容时,每个LiveServerTestCase测试在完成tearDown函数后都会以以下错误结束: File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\backends\base\base.py", line 239, in _

我可以成功运行所有单元测试,如果我运行独立的服务器,我甚至可以成功运行selenium测试,但是当我尝试使用LiveServerTestCases以自包含的方式测试所有内容时,每个LiveServerTestCase测试在完成tearDown函数后都会以以下错误结束:

  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\backends\base\base.py", line 239, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\test\testcases.py", line 209, in __call__
    self._post_teardown()
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\test\testcases.py", line 908, in _post_teardown
    self._fixture_teardown()
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\test\testcases.py", line 943, in _fixture_teardown
    inhibit_post_migrate=inhibit_post_migrate)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\core\management\__init__.py", line 148, in call_command
    return command.execute(*args, **defaults)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\core\management\base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\core\management\commands\flush.py", line 80, in handle
    emit_post_migrate_signal(verbosity, interactive, database)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\core\management\sql.py", line 51, in emit_post_migrate_signal
    **kwargs
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\dispatch\dispatcher.py", line 175, in send
    for receiver in self._live_receivers(sender)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\dispatch\dispatcher.py", line 175, in <listcomp>
    for receiver in self._live_receivers(sender)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\contrib\auth\management\__init__.py", line 79, in create_permissions
    Permission.objects.using(using).bulk_create(perms)
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\models\query.py", line 471, in bulk_create
    obj_without_pk._state.db = self.db
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\transaction.py", line 212, in __exit__
    connection.commit()
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\backends\base\base.py", line 261, in commit
    self._commit()
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\backends\base\base.py", line 239, in _commit
    return self.connection.commit()
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\backends\base\base.py", line 239, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uu\lib\site packages\django\db\backends\base\base.py”,第239行,在提交中
返回self.connection.commit()
django.db.utils.IntegrityError:外键约束失败
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uuu\lib\site packages\django\test\testcases.py”,第209行,在调用中__
self.\u post\u teardown()
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\ulib\site packages\django\test\testcases.py”,第908行,在拆卸后
自紧装置拆卸()
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\ulib\site packages\django\test\testcases.py”,第943行,位于拆卸中
禁止后移动=禁止后移动)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\core\management\\uuuuuuu init\uuuuuu.py”,第148行,在call\u命令中
return命令。execute(*args,**默认值)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\core\management\base.py”,第353行,在execute中
输出=self.handle(*args,**选项)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\core\management\commands\flush.py”,第80行,位于句柄中
发出后迁移信号(详细、交互式、数据库)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\ulib\site packages\django\core\management\sql.py”,第51行,在emit\u post\u migrate\u信号中
**夸尔斯
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\dispatch\dispatcher.py”,第175行,在send中
对于自身中的接收者。\u现场\u接收者(发送者)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\dispatch\dispatcher.py”,第175行,在
对于自身中的接收者。\u现场\u接收者(发送者)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\contrib\auth\management\\uuuu init\uuuu.py”,第79行,位于创建权限中
Permission.objects.using(using).bulk\u create(perms)
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\db\models\query.py”,第471行,批量创建
没有主键的obj_._state.db=self.db
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uu\lib\site packages\django\db\transaction.py”,第212行,在\uu\u出口处__
commit()连接
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\db\backends\base\base.py”,第261行,提交
自我承诺
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\db\backends\base\base.py”,第239行,在提交中
返回self.connection.commit()
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uuu\lib\site packages\django\db\utils.py”,第89行,在退出中__
使用exc_值的_回溯(回溯)提高dj_exc_值
文件“C:\Users\Win7\.virtualenvs\lang-QbOXb8q\uulib\site packages\django\db\backends\base\base.py”,第239行,在提交中
返回self.connection.commit()
django.db.utils.IntegrityError:外键约束失败
我非常确定我的数据库模型中没有任何错误,因为当我启动一个单独的服务器实例并行运行时,所有的单元测试和selenium测试都运行良好,所以我猜这与selenium有关

我试过使用ChromeWebDriver、IE webdriver和FirefoxWebDriver。同样的结果。 它似乎与我的数据库无关,因为该错误仅发生在LiveServerTestCases中

环境详情
  • Django版本2.1
  • SQLite3版本3.20.0

有关Django版本、数据库的类型和版本以及您的代码试用的更多信息将有助于我们更好地调试此问题

但是,此错误消息

File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\core\management\sql.py", line 51, in emit_post_migrate_signal **kwargs
.
File "C:\Users\Win7\.virtualenvs\lang-QbOXb8q_\lib\site-packages\django\db\backends\base\base.py", line 239, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed
…表示试图保存现有模型实例时引发了一个IntegrityError

根据:

  • :如果试图保存违反外键约束的现有模型实例,则这是向后不兼容的更改(IntegrityError:FOREIGN KEY constraint失败
  • 现在创建外键时使用的是可延迟的初始延迟,而不是可延迟的立即延迟。因此,可能需要重建表,以使用新定义重新创建外键,特别是在使用以下模式时

    from django.db import transaction
    
    with transaction.atomic():
        Book.objects.create(author_id=1)
        Author.objects.create(id=1)
    
  • 如果不将外键重新创建为延迟的,则第一个
    create()
    将在强制外键约束时失败

  • @dirkgroten在此提供了一个示例,如下所示:

    • 在代码中查找类似的模式:

       # in pagetree/models.py, line 810
       @classmethod
       def create_from_dict(cls, d):
          return cls.objects.create()  # what happens to d by the way?
      
    • 如果出现
      ForeignKey约束
      错误,则此操作肯定会失败,因为页面块必须具有节,因此您不能在未首先分配它的情况下调用create