当我在django-admin中编辑对象(用户276)时,出现外键错误:
IntegrityError at /admin/auth/user/276/change/
(1452, 'Cannot add or update a child row: a foreign key constraint fails
(`my_db_name`.`django_admin_log`, CONSTRAINT
`django_admin__content_type_id_c4bce8eb_fk_django_content_type_id`
FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`))')
在根据django_admin_log表中的用户276检查记录时,我看到字段content_type_id为126。
mysql> select id, object_id, content_type_id, user_id from django_admin_log order by id;
+----+-----------+-----------------+---------+
| id | object_id | content_type_id | user_id |
+----+-----------+-----------------+---------+
| 1 | 276 | 126 | 276 |
| 6 | 276 | 126 | 276 |
| 8 | 276 | 126 | 276 |
| 9 | 276 | 126 | 276 |
| 10 | 276 | 126 | 276 |
| 11 | 276 | 126 | 276 |
| 13 | 1 | 144 | 276 |
| 16 | 1 | 182 | 276 |
| 19 | 276 | 126 | 276 |
+----+-----------+-----------------+---------+
9 rows in set (0.00 sec)
当我查看django_content_types表时,我发现ID 126确实存在,并且与正确的类型有关:
mysql> select * from django_content_type order by id;
+-----+---------------+---------------------------------+
| id | app_label | model |
+-----+---------------+---------------------------------+
| 124 | auth | group |
| 125 | auth | permission |
| 126 | auth | user |
| 127 | contenttypes | contenttype |
| 128 | sessions | session |
| 129 | sites | site |
| 130 | admin | logentry |
| 131 | account | emailconfirmation |
因此对于较旧的日志,一切似乎都正确,但是现在,由于某种原因,当在admin中编辑用户时,Django尝试将content_id不同于126的用户276行插入到276用户的django_admin_log中(否则,不会得到FK约束。
问题是:Django如何为模型获取不正确的content_type_id?还是正在发生其他事情?
其他信息:
在Ubuntu上使用django 2.0和MySQL。