如何为Django FlatPage模型配置modeltranslation多语言迁移
解决方案
完全可以不修改Django源码实现FlatPage的多语言迁移需求,你遇到的冲突是因为迁移文件归属和依赖链配置错误导致的,可按以下步骤解决:
快速修复当前冲突
你直接把属于flatpages应用的迁移文件放到了main应用的迁移目录下,Django迁移系统会将该文件识别为main应用的迁移,但它没有声明依赖main应用已有的0001_initial,才会出现双叶节点冲突,只需修改main/migrations/0002_flatpages_translations.py的依赖配置即可:
from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('flatpages', '0001_initial'), ('main', '0001_initial'), # 新增这行,声明依赖main应用的上一个迁移 ] operations = [ # 原有操作保持不变 migrations.AddField( model_name='flatpage', name='content_en', field=models.TextField(blank=True, null=True, verbose_name='content'), ), migrations.AddField( model_name='flatpage', name='content_fr', field=models.TextField(blank=True, null=True, verbose_name='content'), ), migrations.AddField( model_name='flatpage', name='title_en', field=models.CharField(max_length=200, null=True, verbose_name='title'), ), migrations.AddField( model_name='flatpage', name='title_fr', field=models.CharField(max_length=200, null=True, verbose_name='title'), ), ]
修改完成后直接运行python manage.py migrate即可正常执行迁移。
更规范的长期方案
如果要避免后续修改内置应用迁移时再出现类似问题,可通过Django的MIGRATION_MODULES配置重定向内置应用的迁移存储路径:
- 在
settings.py中添加如下配置:
MIGRATION_MODULES = { # 将flatpages的迁移文件存储路径重定向到项目main应用下的flatpages_migrations目录 'flatpages': 'main.flatpages_migrations', }
- 在main应用下新建
flatpages_migrations文件夹,并在文件夹内添加空的__init__.py文件 - 清理之前生成的错误迁移文件后,运行
python manage.py makemigrations flatpages,迁移文件会自动生成到你指定的目录,不会写入Django源码目录,也不会和main应用自身的迁移产生冲突。
内容的提问来源于stack exchange,提问作者scandel
相关产品推荐
相关产品推荐

