Python - Django ORM ManyToManyField 创建第三张表
Max.Bai
2020-11
当我们开发的过程中原先多对多关系不需要在Models建第三张表,Django会自动创建表,如果业务发展,需要在多对多的关系中添加属性,那就需要手动添加第三张表,并添加字段。
如果直接修改并执行的话那就会出现下面的错误:
they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on
方法一
如果不考虑数据,删除数据库,删除所有migrations文件,重新建库,重新执行makemigrations migrate就可以解决了。
方法二
如果已经有一些数据,为了保存原来的数据,我们就比较麻烦了,这里有一些方法做了记录。
操作之前备份数据库,操作失误方便恢复。
1. python manage.py dumpdata app_name.ModelName 导出原来自动生成的第三张表数据
2. 修改自动生成的新的migration文件, 把AlterField()改为 RemoveField + AddField 的组合
e.g
# 原来
migrations.AlterField(
model_name='permission',
name='roles',
field=mo