#16206 closed Bug (invalid)
DB router example causes bug in django admin delete
Reported by: | Cal Leeming | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.3 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Caused by auth models not having an _meta.
Example based off the code in:
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#an-example
Cal
class DBRouter(object): """A router to control all database operations on models in the myapp application""" def db_for_read(self, model, **hints): "Point all operations on myapp models to 'other'" if model._meta.app_label == 'carma': return 'carma_ro' elif model._meta.app_label == 'nats': return 'nats_ro' elif model._meta.app_label == 'ddcms': return 'nats_rw' else: return 'default' return None def db_for_write(self, model, **hints): "Point all operations on myapp models to 'other'" if model._meta.app_label == 'carma': return 'carma_ro' elif model._meta.app_label == 'nats': return 'nats_ro' elif model._meta.app_label == 'ddcms': return 'nats_rw' else: return 'default' return None def allow_relation(self, obj1, obj2, **hints): "Allow any relation if a model in myapp is involved" if obj1._meta.app_label == 'carma' or obj2._meta.app_label == 'carma': # Allow DDCMS to have a relation with CARMA and NATS. if obj1._meta.app_label in ('carma', 'nats', 'ddcms') and obj2._meta.app_label in ('carma', 'nats', 'ddcms'): return True else: return False else: return True def allow_syncdb(self, db, model): if model._meta.app_label == 'carma': return False elif model._meta.app_label == 'nats': return False elif model._meta.app_label == 'ddcms' and db == 'default': return False else: return True
Environment: Request Method: GET Request URL: http://dev.cp.dukedollars.com/admin/auth/user/2/delete/ Django Version: 1.2.4 Python Version: 2.6.6 Installed Applications: ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.admin', 'django.contrib.admindocs', 'debug_toolbar', 'webapp.nats', 'webapp.carma', 'webapp.ddcms', 'webapp.sites.ma', 'webapp.sites.cp', 'webapp.accounts'] Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'webapp.strip_whitespace.StripWhitespaceMiddleware', 'webapp.multihost.MultiHostMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware', 'webapp.djerror.DJErrorMiddleware') Traceback: File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/core/handlers/base.py" in get_response 100. response = callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/contrib/admin/options.py" in wrapper 265. return self.admin_site.admin_view(view)(*args, **kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/utils/decorators.py" in _wrapped_view 76. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/views/decorators/cache.py" in _wrapped_view_func 78. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/contrib/admin/sites.py" in inner 190. return view(request, *args, **kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/utils/decorators.py" in _wrapper 21. return decorator(bound_func)(*args, **kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/utils/decorators.py" in _wrapped_view 76. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/utils/decorators.py" in bound_func 17. return func(self, *args2, **kwargs2) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/contrib/admin/options.py" in delete_view 1135. (deleted_objects, perms_needed) = get_deleted_objects((obj,), opts, request.user, self.admin_site) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/contrib/admin/util.py" in get_deleted_objects 111. obj._collect_sub_objects(collector) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/db/models/base.py" in _collect_sub_objects 625. db = router.db_for_write(f.rel.through.__class__, instance=self) File "/usr/local/lib/python2.6/site-packages/Django-1.2.4-py2.6.egg/django/db/utils.py" in _route_db 134. chosen_db = method(model, **hints) File "/ddcms/dev/webapp/db_router.py" in db_for_write 19. if model._meta.app_label == 'carma': Exception Type: AttributeError at /admin/auth/user/2/delete/ Exception Value: type object 'ModelBase' has no attribute '_meta'
Change History (4)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
Btw I did a quick patch to the db router to check for:
if hasattr(model, '_meta'):
But this is quite hacky :/
comment:3 by , 13 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Update your Django instance, 1.2.4 is from december 2010. #14948 most probably solves this and was fixed after 1.2.4 was released.
comment:4 by , 13 years ago
Roger that, I'll upgrade on our next major release and will let you know if the issue goes away. Thanks!
Note:
See TracTickets
for help on using tickets.
Possible re-co-occurrence of https://code.djangoproject.com/ticket/14948