问题:在后台管理界面添加条目时,报外键冲突导致添加失败。
django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`blog`.`django_admin_log`, CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')
auth_user 表: 新的超级用户条目将被添加到该表中,包含用户名、哈希密码、电子邮件等。
django_admin_log 表: 在某些情况下,Django Admin 会记录管理员操作。如果 createsuperuser 命令使用 Django Admin 的某些组件,则可能会创建日志记录。
当继承自 AbstractUser
,并自定义一些字段(如 mobile
),Django 将根据这个自定义模型来创建和管理用户。自定义用户模型对应于 tb_user
表,而不是默认的 auth_user
表。因此,执行 createsuperuser
时,数据会写入 tb_user
,当然前提是 AUTH_USER_MODEL
配置正确。
查找原因
查了django_admin_log表,其FOREIGN KEY (user_id
)是依赖于auth_user表的id:
mysql> SHOW CREATE TABLE django_admin_log;
| django_admin_log | CREATE TABLE `django_admin_log` (
`id` int NOT NULL AUTO_INCREMENT,
`action_time` datetime(6) NOT NULL,
`object_id` longtext,
`object_repr` varchar(200) NOT NULL,
`action_flag` smallint unsigned NOT NULL,
`change_message` longtext NOT NULL,
`content_type_id` int DEFAULT NULL,
`user_id` int NOT NULL,
PRIMARY KEY (`id`),
KEY `django_admin_log_content_type_id_c4bce8eb_fk_django_co` (`content_type_id`),
KEY `django_admin_log_user_id_c564eba6_fk_auth_user_id` (`user_id`),
CONSTRAINT `django_admin_log_content_type_id_c4bce8eb_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`),
CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`),
CONSTRAINT `django_admin_log_chk_1` CHECK ((