#25564 closed Bug (duplicate)
Django Admin's "View on Site" ignores model's custom manager
Reported by: | Yurii Zolot'ko | Owned by: | nobody |
---|---|---|---|
Component: | contrib.contenttypes | Version: | 1.8 |
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
When there is model A located in DB other than default having custom manager and/or custom DB router to query appropriate database they both are ignored by django admin's "View on Site" feature. The problem indeed is deeper in content types get_object_for_this_type() implementation. Example source code:
class Manager(models.Manager): def get_queryset(self): return super(Manager, self).get_queryset().using('other') class A(models.Model): ... objects = Manager() class Router(object): def db_for_read(self, model, **hints): if isinstance(model, A): return 'other' def db_for_write(self, model, **hints): if isinstance(model, A): return 'other'
Current behaviour: with this setup clicking "View on Site" at model A's admin still results at "no such table: a" with traceback:
Request Method: GET Request URL: http://localhost:8000/admin/r/27/1432/ Traceback: File "/home/i/frontend/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/i/frontend/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in wrapper 254. return self.admin_view(view, cacheable)(*args, **kwargs) File "/home/i/frontend/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 110. response = view_func(request, *args, **kwargs) File "/home/i/frontend/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 57. response = view_func(request, *args, **kwargs) File "/home/i/frontend/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner 233. return view(request, *args, **kwargs) File "/home/i/frontend/local/lib/python2.7/site-packages/django/contrib/contenttypes/views.py" in shortcut 21. obj = content_type.get_object_for_this_type(pk=object_id) File "/home/i/frontend/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py" in get_object_for_this_type 194. return self.model_class()._base_manager.using(self._state.db).get(**kwargs) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/models/query.py" in get 328. num = len(clone) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/models/query.py" in __len__ 144. self._fetch_all() File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all 965. self._result_cache = list(self.iterator()) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/models/query.py" in iterator 238. results = compiler.execute_sql() File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 840. cursor.execute(sql, params) File "/home/i/frontend/local/lib/python2.7/site-packages/debug_toolbar/panels/sql/tracking.py" in execute 159. return self._record(self.cursor.execute, sql, params) File "/home/i/frontend/local/lib/python2.7/site-packages/debug_toolbar/panels/sql/tracking.py" in _record 101. return method(sql, params) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/backends/utils.py" in execute 79. return super(CursorDebugWrapper, self).execute(sql, params) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/backends/utils.py" in execute 64. return self.cursor.execute(sql, params) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/utils.py" in __exit__ 97. six.reraise(dj_exc_type, dj_exc_value, traceback) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/backends/utils.py" in execute 64. return self.cursor.execute(sql, params) File "/home/i/frontend/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py" in execute 318. return Database.Cursor.execute(self, query, params) Exception Type: OperationalError at /admin/r/27/1432/ Exception Value: no such table: categories
Expected behaviour: django admin and get_object_for_this_type() should use custom router / custom manager
Change History (3)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
Component: | Uncategorized → contrib.contenttypes |
---|---|
Resolution: | → duplicate |
Status: | new → closed |
Type: | Uncategorized → Bug |
Looks like a duplicate of #16281. Can you confirm?