Переопределить Config приложения Django, создаётся лишняя миграция django-cms

31 октября 2021 г. 2: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 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Права на использование материала, расположенного на этой странице https://vivazzi.pro/it/override-config/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="https://vivazzi.pro/it/override-config/">https://vivazzi.pro/it/override-config/</a>

Подробнее: Правила использования сайта

Для тех, кто продаёт через свой профиль в соц. сетях: моя сестра, Анастасия Мальцева запустила свой курс: «Комфортные продажи через контент»

Все знания построены на собственном опыте и имеют хороший результат, поэтому если вы продаёте товары или услуги и хотите повысить эффективность вашего аккаунта или сайта, то курс будет для вас полезен!

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

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментрирования от своего имени, войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц