【问题标题】:Apply a migration to Django Flatpage model将迁移应用到 Django Flatpage 模型
【发布时间】:2021-12-29 13:25:04
【问题描述】:

我想在使用 flatpages 应用程序的 Django 应用程序中使用 modeltranslation 包。

我安装了两者,遵循模型翻译文档,并创建了一个 translation.py 文件,我把它放在 main 应用程序中(所有全局内容都在其中),因为我不能直接把它放在公寓里pages 应用程序(Django 代码是必需的,未提交给 VCS)。

# django/main/translation.py
from modeltranslation.translator import translator, TranslationOptions
from django.contrib.flatpages.models import FlatPage


class FlatPageTranslationOptions(TranslationOptions):
    fields = ('title', 'content')


translator.register(FlatPage, FlatPageTranslationOptions)

然后我运行python manage.py makemigrations,它在平面应用程序/usr/local/lib/python3.8/site-packages/django/contrib/flatpages/migrations/0002_auto_20211118_1558.py 中创建了一个迁移文件。它将再次出现在 Django 代码中,因此我尝试将其简单地移动到位于django/main/migrations/0002_flatpages_translations.pymain 应用程序(已经有一个不相关的0001_initial.py 迁移,它没有依赖关系):

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('flatpages', '0001_initial'),
    ]

    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) 时,我收到了这个错误:

CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph: (0001_initial, 0002_flatpages_translations in main).
To fix them run 'python manage.py makemigrations --merge'

我尝试了--merge 标志,但又遇到了另一个错误:ValueError: Could not find common ancestor of ['0001_initial', '0002_flatpages_translations'] 有没有可能实现我想做的事情?

【问题讨论】:

    标签: python django django-migrations


    【解决方案1】:

    找到了解决方案,所以如果有人遇到同样的问题,我会在此处发布。根据Django documentation,您可以指定可以在每个应用程序基础上找到迁移模块的包。

    所以,在settings.py 中,添加:

    MIGRATION_MODULES = {
        'flatpages': 'main.migrations.flatpages',
    }
    

    然后将迁移文件0002_flatpages_translations.py移动到django/main/migrations/flatpages/中。对于 flatpages 应用,您还需要从该目录中的 flatpage 应用复制 0001_initial.py 迁移文件。

    你很好,Django 现在在你的新目录中搜索平面页面应用程序的迁移。

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2019-07-12
      • 2012-01-05
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2019-09-15
      • 2017-03-20
      • 2020-07-21
      相关资源
      最近更新 更多