mysql - Django 会为模型获取错误的 content_type_id 吗?
问题描述
当我在 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 |
因此,对于旧日志,一切似乎都是正确的,但是现在,由于某种原因,当在管理员中编辑用户时,Django 试图在 django_admin_log 中为用户 276 插入一行,其 content_id 不是 126(否则我们不会获得 FK 约束)。
问题是:django 怎么会得到一个不正确的 content_type_id 模型?还是发生了其他事情?
附加信息:
- 我认为我在 admin.py 文件中没有做任何有趣的事情,但请询问您是否想看任何东西。
- 我正在使用 MySQL 连接做非常有趣的事情,因为它是一个使用django-db-multitenant的多租户架构站点
在 Ubuntu 上使用 django 2.0 和 MySQL。
解决方案
推荐阅读
- android - android在另一个类中处理活动方法
- kotlin - 使用 super 的 kotlin 中的扩展函数
- regex - 在最后一个反斜杠之后提取第一个非点文本字符串
- javascript - 在 UI5 中将 AnalyticMap 模型与 OData 服务绑定
- python - 在 Pandas 中使用 SQLAlchemy 清理数据库连接
- ruby-on-rails-4 - 模型属性不是持久化的轨道
- mysql - 在多个表中查找包含电子邮件的所有行
- javascript - 如何在实时聊天或机器人聊天中启用音频音效?
- authentication - NetSuite SuiteTalk 令牌身份验证:登录尝试无效
- javascript - 未捕获(承诺中)错误:意外的令牌 < 更新打字稿类型定义