Django中修改字段时注意的一个问题

问题:
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的文件和数据库,重新创建数据库。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值