我正在努力为 django-pagetree 添加 Django 2.0 支持图书馆。在自动化测试期间,使用 sqlite 内存数据库,我遇到了一堆这样的错误:
File "/home/nnyby/src/django-pagetree/pagetree/tests/test_models.py", line 638, in setUp
'children': [],
File "/home/nnyby/src/django-pagetree/pagetree/models.py", line 586, in add_child_section_from_dict
...
File "/home/nnyby/src/django-pagetree/venv/lib/python3.5/site-packages/django/db/backends/base/base.py", line 239, in _commit
return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed
这在 Django 2.0 发行说明中有说明:https://docs.djangoproject.com/en/2.0/releases/2.0/#foreign-key-constraints-are-now-enabled-on-sqlite
根据我不完全理解的描述,这不应该适用于非持久性的测试数据库,对吧?使用 Django 2.0 时,我的 sqlite 测试数据库不会使用适当的选项创建吗?
我用于测试的应用程序设置在这里:https://github.com/ccnmtl/django-pagetree/blob/master/runtests.py
最佳答案
文档说明了两件事:
如果您有 ForeignKey 约束,它们现在会在数据库级别强制执行。因此,请确保您没有违反外键约束。这是您问题的最可能原因,尽管这意味着您已经在其他数据库中看到过这些问题。在您的代码中寻找类似这样的模式:
# in pagetree/models.py, line 810 @classmethod def create_from_dict(cls, d): return cls.objects.create() # what happens to d by the way?
这肯定会因外键约束错误而失败,因为
PageBlock
必须具有section
,因此您不能在没有先分配的情况下调用create
如果您通过执行原子事务(例如)延迟提交外键来规避外键约束,则您的外键需要初始延迟。事实上,您的测试数据库应该已经有了,因为它每次都会重建。
关于python - Django 2.0 : sqlite IntegrityError: FOREIGN KEY constraint failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47620487/