Переопределить 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