Wagtail 提供的很多功能需要通过外键实现,应用创建的多了类写的多了就免不了将某个模型中的类和其外键类一并删除或改换其他地方。如果使用 sqlite 数据库,执行迁移并没有问题。但生产环境使用 mysql/mariadb 时就会出现标题所示的错误。

django.db.utils.OperationalError: (1829, "Cannot drop column 'page_ptr_id': needed in a foreign key constraint 'home_formfield_page_id_11ee50f3_fk_home_formpage_page_ptr_id' of table `myproject`.`home_formfield`")

解决办法是不要把类和外键类一并删除,而是应该分步执行。先删除外键类,执行一次迁移,然后再删除类,再执行迁移。

Reference