当尝试使用SqlLite3作为Django的DB后端时,我希望能够使用SqLite的外键支持。 根据{{3}},您可以通过运行以下来启用外键支持:
PRAGMA foreign_keys = ON;
默认情况下禁用此支持,并且在运行大多数数据库相关测试时是理想的。 在使用Django测试框架时如何控制此功能?你能在setUp / tearDown方法中发送特定于后端的命令吗?您是否愿意在全局连接设置(' DATABASE =' 设置)中指定此选项?
答案 0 :(得分:1)
这里部分回答:https://stackoverflow.com/a/6843142/552671。
您只需在应用中激活它(通常在myapp/apps.py
中)。
from django.db.backends.signals import connection_created
def activate_foreign_keys(sender, connection, **kwargs):
"""Enable integrity constraint with sqlite."""
if connection.vendor == 'sqlite':
cursor = connection.cursor()
cursor.execute('PRAGMA foreign_keys = ON;')
class MyAppConfig(AppConfig):
def ready(self):
connection_created.connect(activate_foreign_keys)
您还必须配置MyAppConfig
,将default_app_config = 'myapp.apps.PanelConfig'
写入myapp/__init__.py
。
注意:这样不仅可以激活外键,还可以激活SQLite。我认为这就是你想要的。
答案 1 :(得分:0)
在当前的django中不再需要它。在https://code.djangoproject.com/ticket/14204
中关闭但是在测试中未应用。这是因为检查被推迟到数据库提交,而在测试中从来没有发生。在测试中会回滚。