Переопределить Config приложения Django, создаётся лишняя миграция django-cms
31 октября 2021 г. 6:55
Иногда требуется переопределить Config по разным причинам.
Например, в моём случае после обновления django 3.2+ стала автоматически создаваться миграция для django-cms, когда вызываешь makemigrations для своего проекта.
Именно в этой ошибке такое поведение возникло из-за введения default_auto_field (см: https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig.default_auto_field) и установки своего DEFAULT_AUTO_FIELD в значение отличное от django.db.models.AutoField, а именно django.db.models.BigAutoField. Поэтому при вызове makemigrations стала создаваться миграция, в которой для всех моделей django-cms тип поля ID становился BigAutoField.
Чтобы исправить ошибку выше, нужно переопределить CMSConfig, в каком-нибудь своём приложении в любом файле, но для конвенции лучше в apps.py:
# spec/apps.py from cms.apps import CMSConfig as BaseCMSConfig class CMSConfig(BaseCMSConfig): default_auto_field = 'django.db.models.AutoField'
Теперь в INSTALLED_APPS заменим 'cms' на наш:
INSTALLED_APPS = (
# 'cms',
'spec.apps.CMSConfig',
)
Если вы уже успели в своём проекте запустить migrate, то нужно вернуть правильный тип к ID полям. Для этого запустите makemigrations, чтобы снова ID поля стали типом django.db.models.AutoField, и примените миграцию командой migrate. Теперь можно уже удалять две последние миграции со своего проекта. Также можно удалить записи применённых миграций с базы данных (хотя это не принципиально).
Я думаю, что разработчики django-cms добавят по умолчанию default_auto_field, поэтому в своём проекте после обновления версии django-cms проверьте появился ли default_auto_field в CMSConfig. Если да, то верните 'cms' в INSTALLED_APPS.
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0