背景
用django自带的admin和auth搭建了内部网站,使用了django的用户和权限分组系统,但是在移到生产环境时发现公司把REFERENCES这种命令禁止了,DBA说影响性能不给开权限,所以不得不尝试把外键从db层移到应用层。
第一次尝试
刚开始只找到https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.db_constraint,中db_constraint这个参数,尝试了下的确可以移除物理外键,但是由于我使用的User,Group等对象都是django内部的模型,我如果要修改的话,要么改源码,要么只能重写了。
于是模仿https://www.zhihu.com/question/61129892/answer/189472143中,对AbstractBaseUser和PermissionsMixin这两个类里只要用到ForeignKey或者manttomany的字段都加上db_constraint=False这个参数。具体代码就不展示了。反正最后不是很顺利,跟内部很多东西有冲突,看起来即使弄好了也没法用权限系统,因此尝试其他方法。