0

我正在使用官方教程学习 django 。

我已将 settings.py 配置为使用 SQLite,然后运行python manage.py syncdb​​. auth_user生成了以下架构,查看架构后发现表的id列和auth_user_groups表的列之间没有引用user_id。但是,表的列和表的列之间确实存在引用。auth_groupidauth_user_groupsgroup_id

为什么 auth_user 表和 auth_group 表之间没有引用?

--..OTHER TABLES
    CREATE TABLE "auth_user" (
        "id" integer NOT NULL PRIMARY KEY,
        "username" varchar(30) NOT NULL UNIQUE,
        "first_name" varchar(30) NOT NULL,
        "last_name" varchar(30) NOT NULL,
        "email" varchar(75) NOT NULL,
        "password" varchar(128) NOT NULL,
        "is_staff" bool NOT NULL,
        "is_active" bool NOT NULL,
        "is_superuser" bool NOT NULL,
        "last_login" datetime NOT NULL,
        "date_joined" datetime NOT NULL
    );
    CREATE TABLE "auth_user_groups" (
        "id" integer NOT NULL PRIMARY KEY,
        "user_id" integer NOT NULL, --why not "user_id" integer NOT NULL REFERENCES "auth_user" ("id") ?
        "group_id" integer NOT NULL REFERENCES "auth_group" ("id"),
        UNIQUE ("user_id", "group_id")
--...OTHER TABLES
4

1 回答 1

1

SQLite推荐使用REFERENCESsyntax,并且完整的 FOREIGN KEY 支持需要一个额外的编译指示开关。

从历史上看,SQLite 根本不支持 FOREIGN KEY 约束,当它们被添加时,它需要一个显式的 per-connection 开关来打开它以保持向后兼容性。对于 Django,使用REFERENCES就足够了,不会将 Django 限制为更新的版本,并且不必启用 FOREIGN KEY 支持或检测该功能是否已被编译。

于 2013-02-16T13:21:31.953 回答