Deleting object from stream causes error when contenttypes and streamblocks use different databases
Closed this issue · 2 comments
igor-zmitrovich commented
Deleting object from streamfield cause ProgrammingError
.
Example traceback:
Traceback (most recent call last):
File ".../site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File ".../site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File ".../site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File ".../site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File ".../site-packages/streamfield/views.py", line 58, in delete_instance
obj = t.get_object_for_this_type(pk=pk)
File ".../site-packages/django/contrib/contenttypes/models.py", line 168, in get_object_for_this_type
return self.model_class()._base_manager.using(self._state.db).get(**kwargs)
...
...
File ".../site-packages/MySQLdb/connections.py", line 254, in query
_mysql.connection.query(self, query)
django.db.utils.ProgrammingError: (1146, "Table 'accounts.streamblocks_imagewithtext' doesn't exist")
The problem appears, because for my project contenttypes
are in the accounts
database, however streamblocks
models are stored in the default
. The t.get_object_for_this_type
function runs queryset with .using(self._state.db)
, where self._state.db=="accounts"
.
igor-zmitrovich commented
I have prepared a fix, it worked for my project:
#30
raagin commented
Thank you! I merged it