Ошибка миграции Wagtail с пользовательскими пользовательскими моделями

#django #wagtail

#django #wagtail

Вопрос:

У меня новая установка wagtail. Чтобы создать страницу профиля пользователя, я хочу расширить пользовательские данные. Я добавил приложение с manage.py запустите приложение и следуйте официальной документации:

https://docs.wagtail.io/en/stable/advanced_topics/customisation/custom_user_models.html

Я добавил профиль приложения, и моя модель выглядит так:

 from django.db import models
from django.contrib.auth.models import AbstractUser


class Profiel(AbstractUser):
    bedrijfsnaam = models.CharField(max_length=300,blank=True)
    omschrijving = models.TextField(max_length=500,blank=True)
 

Мои настройки такие:

 AUTH_USER_MODEL = 'profiel.Profiel'
 

Ошибка, которую я получаю при миграции, заключается в следующем:

 django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency profiel.0001_initial on database 'default'.
 

Я нашел тему в Интернете, советующую временно прокомментировать django.contrib.admin в settings.py , но это приводит к другим ошибкам.

Ответ №1:

Ошибка предполагает, что вы уже выполняли ./manage.py migrate перед добавлением пользовательской модели и миграции. Это неверно — ваша миграция для добавления пользовательской пользовательской модели должна быть частью первоначального запуска миграции. Добавление пользовательской пользовательской модели в уже созданную базу данных — гораздо более сложный процесс.

Если это новая установка, лучше всего удалить и воссоздать базу данных (удалив db.sqlite3 файл, если вы используете sqlite или используете dropdb databasename / createdb databasename на postgres) — запуск ./manage.py migrate с новой миграцией на месте должен завершиться успешно.

Ответ №2:

Вы можете запустить только одну миграцию, а не все: https://docs.djangoproject.com/en/3.1/ref/django-admin/#django-admin-migrate

Поэтому адаптируйте и запустите следующую команду:

 django-admin migrate [app_label] profiel.0001_initial
 

Если это не работает из коробки, добавьте --fake флаг в соответствии с приведенными выше документами.

Комментарии:

1. Не используйте --fake флаг, если вы не уверены, что знаете, что происходит на уровне базы данных! Если миграция вносит значимые изменения в базу данных (как это делает profiel.0001_initial ), но вы пропускаете ее --fake , это приведет к повреждению базы данных, которую трудно восстановить.

2. Это не то, что делает —fake.

3. Я попробовал ваше решение с поддельным флагом и без него. Оба привели к одной и той же ошибке.

4. —fake записывает миграцию как примененную, без внесения изменений в базу данных — вот что я подразумеваю под «пропуском». Он предназначен для использования, когда вы внесли изменения каким-либо другим путем — например, путем ручного исправления базы данных. Если вы используете ее здесь, не применяя изменения вручную, вы получите отсутствующую profiel таблицу и не сможете исправить ее путем применения или отката миграции (поскольку история миграции указывает, что таблица должна существовать).