我正在为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
您的外键上是否有add-on-delete?在Django 2.0上,此参数是必需的。 你还可以看到: https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey.on_deletehttps://docs.djangoproject.com/en/2.0/howto/upgrade-version/https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_one/https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey
文件说明了两件事:
如果您有ForeignKey约束,那么它们现在在数据库级别强制执行。因此,请确保没有违反外键约束。这是导致问题的最可能原因,尽管这意味着您会在其他数据库中看到这些问题。在代码中查找这样的模式:
由于
PageBlock
必须有section
,因此如果不首先分配它,就不能调用create
,因此这肯定会失败,并出现ForeignKey约束错误。如果通过执行原子事务(例如)以延迟提交外键来规避外键约束,则外键最初需要延迟。实际上,您的测试数据库应该已经有了它,因为它每次都被重建。
A遇到了一个有点不同的情况和同样的错误。问题是我使用相同的模型名和字段名
错误的代码
苏黎世
相关问题 更多 >
编程相关推荐