Миграция Wagtail Django не применяется при запуске `migrate`.

Когда я запускаю Django makemigrations на Wagtail, я получаю миграцию (вставленную внизу), которая, похоже, не мигрирует должным образом. Здесь вы видите, как я успешно делаю миграцию, применяю ее без ошибок, а затем, после выполнения runserver, получаю сообщение о том, что у меня есть миграции для запуска.

А вот код перехода, который был сделан и, похоже, не применяется:

modules/core/migrations/0019_whofundsyoupage_stream.py

# Generated by Django 5.0.4 on 2024-05-14 16:31

import modules.core.blocks.override
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('core', '0018_auto_20240226_1608'),
    ]

    operations = [
        migrations.AddField(
            model_name='whofundsyoupage',
            name='stream',
            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('text', modules.core.blocks.override.RichTextBlock(label='Body text', required=True))], group=' Content')), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(required=True)), ('alt_text', wagtail.blocks.CharBlock(label='Override image alt-text', required=False)), ('caption', wagtail.blocks.RichTextBlock(features=['link', 'document-link'], label='Override caption', required=False)), ('credit', wagtail.blocks.RichTextBlock(features=['link', 'document-link'], label='Override credit', required=False)), ('image_display', wagtail.blocks.ChoiceBlock(choices=[('full', 'Full'), ('long', 'Long'), ('medium', 'Medium'), ('small-image', 'Small')]))], group=' Content')), ('html_advanced', wagtail.blocks.StructBlock([('html', wagtail.blocks.RawHTMLBlock(label='HTML code', required=True)), ('styling', wagtail.blocks.ChoiceBlock(choices=[('default', 'Default'), ('remove-styles', 'Remove style')]))], group=' Content'))], blank=True, verbose_name='Additional content'),
        ),
    ]

Django думает, что есть непримененные миграции, но на самом деле миграция уже применена. Прежде всего вам следует использовать manage.py showmigrations, чтобы убедиться, что это не так.

Если миграция применена, но Django "не согласен", используйте --fake. Возможно, после этого вам захочется применить миграцию повторно.

Из предоставленного вывода следует, что миграция 0019_whofundsyoupage_stream.py успешно применена во время выполнения команды migrate. Однако, когда вы запускаете сервер после этого, Django все еще указывает, что есть непримененная миграция.

Такое расхождение может возникнуть по нескольким причинам:

  1. Многочисленные экземпляры Django: Убедитесь, что вы выполняете команду runserver в том же окружении, в котором применяли миграцию. Иногда у разработчиков может быть запущено несколько экземпляров Django, и они могут забыть, в какой среде они работают.

  2. Проблемы с зависимостями миграции: Даже если миграция 0019_whofundsyoupage_stream.py успешно применена, в цепочке зависимостей могут быть другие миграции, которые еще не применены. Проверьте, нет ли других непримененных миграций в зависимостях 0019_whofundsyoupage_stream.py.

  3. Обратный ход миграции: Если вы случайно отмените миграцию после ее применения, Django определит ее как непримененную. Убедитесь, что вы не отменили миграцию случайно.

  4. Проблемы с базой данных: Возможно, проблемы с базой данных мешают корректному применению миграции. Вы можете попробовать сбросить базу данных и заново применить миграции.

  5. Повреждение файла миграции: Проверьте, не поврежден ли файл миграции 0019_whofundsyoupage_stream.py или не изменен ли он после создания. Иногда ручные изменения файлов миграции могут вызывать неожиданное поведение.

Посмотрите эти возможности, чтобы устранить неполадки, почему Django все еще указывает на непримененную миграцию, несмотря на ее успешное применение. Если ни один из этих вариантов не решает проблему, предоставление более подробной информации или содержимого других связанных файлов миграции может помочь диагностировать проблему дальше.

Вернуться на верх