问题:
Django 1.7.8
表 Users 和 Tenant 做了多对多关联。django 会自动创建一个表 users_tenants(user_id与tenant_id的对应)
class Users(models.Model):
tenants = models.ManyToManyField(Tenant)
在执行 user.tenants.add(tenant)时,报下面的问题:
ERROR: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`iaasms`.`users_tenants`, CONSTRAINT `users_tenants_users_id_3d9ac202e9485f18_fk_users_user_id` FOREIGN KEY (`users_id`) REFERENCES `users` (`user_id`))')
A:
虽然在setting -> DATABASES -> default 中关闭外键检查:
'OPTIONS':{
"init_command":"SET foreign_key_checks = 0;",
}
可以消除这个错误,但是关联查询 user.tenants.all() 的结果是空的。
根本原因:
在第一次 migrate后,users_tenants的字段 tenant_id的长度来自 表 Tenant中的 tenant_id的长度。
但是,我后来增加了 Tenant中的 tenant_id的长度,在 migrate后,users_tenants中的 tenant_id的长度没有变化。
所以,在执行 user.tenants.add(tenant)时,users_tenants的 tenant_id的长度不够。
在setting -> DATABASES -> default 中关闭外键检查后,虽然不报错了,但users_tenants的tenant_id保存的值不全(实际的数据大于字段长度),所以关联查询的结果是空的。
解决:删除migration的文件和数据库,重新创建数据库。