#32692: Django 3.2 automatic AppConfig discovery breaks projects working in
3.1.8
------------------------------+--------------------------------------
Reporter: Manel Clos | Owner: nobody
Type: Bug | Status: new
Component: Core (Other) | Version: 3.2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+--------------------------------------
Description changed by Manel Clos:
Old description:
> The described method of overriding the default admin site
> (https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#overriding-the-
> default-admin-site), is not compatible with automatic AppConfig
> discovery, if the app (myproject, or myapps) is already in
> INSTALLED_APPS.
>
> **How to reproduce**
> - `pip install Django==3.2`
> - `django-admin startproject myproject`
> - `python manage.py migrate`
> - `python manage.py createsuperuser`
> - Put a template in `myproject/templates/admin/base_site.html`
> - Add `myproject` to `INSTALLED_APPS`
> - `python manage.py runserver` works, I can access the admin site and see
> the changes in templates
> - Follow the guide to override the default admin site,
> https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#overriding-the-
> default-admin-site, this is, create `myproject/admin.py`,
> `myproject/apps.py` and modify `settings.py`.
> - `python manage.py runserver`
>
> **Actual result**
> `RuntimeError: 'myproject.apps' declares more than one default AppConfig:
> 'AdminConfig', 'MyAdminConfig'.``
>
> **This a regression**
> - `pip install Django==3.1.8`
> - `python manage.py runserver`
> - All ok, both templates and AdminConfig working at the same time
>
> **Workaroud**
> - use `app-admin.py` instead of `apps.py` when following the
> documentation to override the default admin site
> - adjust settings.py: `'myproject.apps-admin.MyAdminConfig'` in
> INSTALLED_APPS
> - works with Django 3.2
New description:
The described method of overriding the default admin site
(https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#overriding-the-
default-admin-site), is not compatible with automatic AppConfig
discovery, if the app (myproject, or myapps) is already in INSTALLED_APPS.
**How to reproduce**
- `pip install Django==3.2`
- `django-admin startproject myproject`
- `python manage.py migrate`
- `python manage.py createsuperuser`
- Put a template in `myproject/templates/admin/base_site.html`
{{{
{% extends 'admin/base_site.html' %}
{% block branding %}
Template test
{% endblock %}
}}}
- Add `myproject` to `INSTALLED_APPS`
{{{#!python
INSTALLED_APPS = [
'myproject',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
}}}
- `python manage.py runserver` works, I can access the admin site and see
the changes in templates
- Follow the guide to override the default admin site,
https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#overriding-the-
default-admin-site, this is, create `myproject/admin.py`,
`myproject/apps.py` and modify `settings.py`.
{{{#!python
# myproject/admin.py
from django.contrib import admin
class MyAdminSite(admin.AdminSite):
index_title = 'Test'
# myproject/apps.py
from django.contrib.admin.apps import AdminConfig
class MyAdminConfig(AdminConfig):
default_site = 'myproject.admin.MyAdminSite'
# myproject/settings.py
INSTALLED_APPS = [
'myproject',
'myproject.apps.MyAdminConfig', # 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
}}}
- `python manage.py runserver`
**Actual result**
`RuntimeError: 'myproject.apps' declares more than one default AppConfig:
'AdminConfig', 'MyAdminConfig'.``
**This a regression**
- `pip install Django==3.1.8`
- `python manage.py runserver`
- All ok, both templates and AdminConfig working at the same time
**Workaroud**
- use `app-admin.py` instead of `apps.py` when following the documentation
to override the default admin site
{{{#!python
from django.contrib.admin.apps import AdminConfig
class MyAdminConfig(AdminConfig):
default_site = 'myproject.admin.MyAdminSite'
}}}
- adjust settings.py: `'myproject.apps-admin.MyAdminConfig'` in
INSTALLED_APPS
{{{#!python
INSTALLED_APPS = [
'myproject',
'myproject.apps-admin.MyAdminConfig', # 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
}}}
- works with Django 3.2 now!
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32692#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/067.cbb57ccdd09043cc78e4b9707bc071ce%40djangoproject.com.