#27265: Using @admin.register causes failure when AdminModel constructor is
overriden
----------------------------------------------+--------------------
     Reporter:  Diego Andrés Sanabria Martín  |      Owner:  nobody
         Type:  Bug                           |     Status:  new
    Component:  contrib.admin                 |    Version:  1.10
     Severity:  Normal                        |   Keywords:
 Triage Stage:  Unreviewed                    |  Has patch:  0
Easy pickings:  0                             |      UI/UX:  0
----------------------------------------------+--------------------
 When trying to override the ModelAdmin constructor using the decorator
 @admin.register I get an exception.

 This is an example for a new project called "what" with an simple app
 "why":

 Commands to create the files (I used django 1.8.4):

 django-admin stratproject what
 cd what
 python manage.py startapp why

 what/settings.py
 {{{
 ...
 INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'why',
 )
 ...
 }}}

 why/models.py
 {{{
 from django.db import models

 # Create your models here.
 class WhyMe(models.Model):
     name = models.CharField(max_length=255)
 }}}

 why/admin.py
 {{{
 from django.contrib import admin

 from why.models import WhyMe

 @admin.register(WhyMe)
 class WhyMeAdmin(admin.ModelAdmin):
     def __init__(self, *args, **kwargs):
         super(WhyMeAdmin, self).__init__(*args, **kwargs)
         print("Whaaaaatttt???")
 }}}

 If I run the command 'runserver' I've got:
 {{{
 nhandled exception in thread started by <function wrapper at 0x10ae3b758>
 Traceback (most recent call last):
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/utils/autoreload.py", line 226, in wrapper
     fn(*args, **kwargs)
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/core/management/commands/runserver.py", line 113, in
 inner_run
     autoreload.raise_last_exception()
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/utils/autoreload.py", line 249, in raise_last_exception
     six.reraise(*_exception)
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/utils/autoreload.py", line 226, in wrapper
     fn(*args, **kwargs)
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/__init__.py", line 27, in setup
     apps.populate(settings.INSTALLED_APPS)
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/apps/registry.py", line 115, in populate
     app_config.ready()
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/contrib/admin/apps.py", line 23, in ready
     self.module.autodiscover()
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/contrib/admin/__init__.py", line 26, in autodiscover
     autodiscover_modules('admin', register_to=site)
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/utils/module_loading.py", line 50, in autodiscover_modules
     import_module('%s.%s' % (app_config.name, module_to_search))
   File
 
"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py",
 line 37, in import_module
     __import__(name)
   File "/Users/diegueus9/.virtualenvs/django1.8/what/why/admin.py", line
 6, in <module>
     class WhyMeAdmin(admin.ModelAdmin):
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/contrib/admin/decorators.py", line 28, in
 _model_admin_wrapper
     admin_site.register(models, admin_class=admin_class)
   File "/Users/diegueus9/.virtualenvs/django1.8/lib/python2.7/site-
 packages/django/contrib/admin/sites.py", line 108, in register
     admin_obj = admin_class(model, self)
   File "/Users/diegueus9/.virtualenvs/django1.8/what/why/admin.py", line
 8, in __init__
     super(WhyMeAdmin, self).__init__(*args, **kwargs)
 NameError: global name 'WhyMeAdmin' is not defined
 }}}

 However, if I use the normal registration 'admin.site.register(WhyMe,
 WhyMeAdmin)' everything works fine.
 This also happens with latest 1.8.x, 1.9.x and 1.10.x

--
Ticket URL: <https://code.djangoproject.com/ticket/27265>
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/052.15d2f7da9c4c407905f85df80de087eb%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to