#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
таблицу и не сможете исправить ее путем применения или отката миграции (поскольку история миграции указывает, что таблица должна существовать).