Django - 如何在 Sqlite3 后端启用外键

Mar*_*n K 5 sqlite testing django

当尝试使用 SqlLite3 作为 Django 的数据库后端时,我希望能够使用 SqlLite 的外键支持。根据http://www.sqlite.org/foreignkeys.html,您可以通过运行启用外键支持:

PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

默认情况下禁用此支持,并且在运行大多数依赖于数据库的测试时是可取的。在使用 Django 测试框架时如何控制这个特性?您可以在 setUp/tearDown 方法中发送特定于后端的命令吗?您是否愿意在全局连接设置('DATABASE = '设置)中指定此选项?

Dav*_*ter 2

这里部分回答: 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)
Run Code Online (Sandbox Code Playgroud)

MyAppConfig您还必须配置,default_app_config = 'myapp.apps.PanelConfig'写入myapp/__init__.py.

注意:这不仅会激活外键用于测试,而且还会激活 SQLite。不过,我认为这就是你想要的。