首页 > 解决方案 > 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 模型?还是发生了其他事情?

附加信息:

  1. 我认为我在 admin.py 文件中没有做任何有趣的事情,但请询问您是否想看任何东西。
  2. 我正在使用 MySQL 连接做非常有趣的事情,因为它是一个使用django-db-multitenant的多租户架构站点

在 Ubuntu 上使用 django 2.0 和 MySQL。

标签: mysqldjango

解决方案


推荐阅读