Changes between Version 3 and Version 4 of Ticket #32692
- Timestamp:
- Apr 28, 2021, 7:03:03 AM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #32692 – Description
v3 v4 1 1 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. 2 2 3 **How to reproduce** 3 Example: 4 4 - `pip install Django==3.2` 5 5 - `django-admin startproject myproject` … … 7 7 - `python manage.py createsuperuser` 8 8 - Put a template in `myproject/templates/admin/base_site.html` 9 {{{ 10 {% extends 'admin/base_site.html' %} 11 12 {% block branding %} 13 Template test 14 {% endblock %} 15 }}} 9 16 - Add `myproject` to `INSTALLED_APPS` 17 {{{#!python 18 INSTALLED_APPS = [ 19 'myproject', 20 21 'django.contrib.admin', 22 'django.contrib.auth', 23 'django.contrib.contenttypes', 24 'django.contrib.sessions', 25 'django.contrib.messages', 26 'django.contrib.staticfiles', 27 ] 28 }}} 10 29 - `python manage.py runserver` works, I can access the admin site and see the changes in templates 11 30 - 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`. 31 {{{#!python 32 # myproject/admin.py 33 from django.contrib import admin 34 35 class MyAdminSite(admin.AdminSite): 36 index_title = 'Test' 37 38 39 # myproject/apps.py 40 from django.contrib.admin.apps import AdminConfig 41 42 class MyAdminConfig(AdminConfig): 43 default_site = 'myproject.admin.MyAdminSite' 44 45 46 # myproject/settings.py 47 INSTALLED_APPS = [ 48 'myproject', 49 50 'myproject.apps.MyAdminConfig', # 'django.contrib.admin', 51 'django.contrib.auth', 52 'django.contrib.contenttypes', 53 'django.contrib.sessions', 54 'django.contrib.messages', 55 'django.contrib.staticfiles', 56 ] 57 }}} 12 58 - `python manage.py runserver` 13 59 14 **Actual result** 60 Actual result: 15 61 `RuntimeError: 'myproject.apps' declares more than one default AppConfig: 'AdminConfig', 'MyAdminConfig'.`` 16 62 17 **This a regression** 63 Is this a regression? 18 64 - `pip install Django==3.1.8` 19 65 - `python manage.py runserver` 20 66 - All ok, both templates and AdminConfig working at the same time 21 67 22 **Workaroud** 68 Workaroud 23 69 - use `app_admin.py` instead of `apps.py` when following the documentation to override the default admin site 24 - adjust settings.py: `'myproject.apps_admin.MyAdminConfig'` in INSTALLED_APPS 25 - works with Django 3.2 70 {{{#!python 71 # myproject/apps_admin.py 72 from django.contrib.admin.apps import AdminConfig 73 74 class MyAdminConfig(AdminConfig): 75 default_site = 'myproject.admin.MyAdminSite' 76 }}} 77 - adjust settings.py: `'myproject.apps_admin.MyAdminConfig' in INSTALLED_APPS 78 {{{#!python 79 INSTALLED_APPS = [ 80 'myproject', 81 82 'myproject.apps_admin.MyAdminConfig', # 'django.contrib.admin', 83 'django.contrib.auth', 84 'django.contrib.contenttypes', 85 'django.contrib.sessions', 86 'django.contrib.messages', 87 'django.contrib.staticfiles', 88 ] 89 }}} 90 - works with Django 3.2!