Override Config of Django app, extra django-cms migration is created
Oct. 31, 2021, 6:55 a.m.
Sometimes you need to override Config
for various reasons.
For example, in my case, after updating django 3.2+, a migration for django-cms was automatically created when you call makemigrations for your project.
It was in this error that this behavior arose due to the introduction of default_auto_field
(see: https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig.default_auto_field) and setting your DEFAULT_AUTO_FIELD
to a value other than django.db.models.AutoField
, namely django.db.models.BigAutoField
. Therefore, when calling makemigrations
, a migration was created in which the type of the ID
field became BigAutoField
for all django-cms models.
To fix the error above, you need to override CMSConfig
in any of your applications in any file, but for convention it is better in apps.py
:
# spec/apps.py from cms.apps import CMSConfig as BaseCMSConfig class CMSConfig(BaseCMSConfig): default_auto_field = 'django.db.models.AutoField'
Now replace 'cms'
in INSTALLED_APPS
:
INSTALLED_APPS = ( # 'cms', 'spec.apps.CMSConfig', )
If you have already run migrate in your project, then you need to return the correct type to the ID
fields. To do this, run makemigrations so that the ID
field become django.db.models.AutoField
again, and apply the migration with the migrate command. Now you can already delete the last two migrations from your project. It is also possible to delete records of applied migrations from the database (although this is not essential).
I think the django-cms developers will add default_auto_field
by default, so in your project after updating the django-cms version, check if default_auto_field
appears in CMSConfig
. If so, return 'cms'
to INSTALLED_APPS
.
Comments: 0