Hi, I wanted to raise a but around this, but I thought it might be a better idea to ask first on the developer's group.
If I'm running a select_for_update statement in a multidb environment that uses a read-only slave database, I get the following traceback: Traceback: File "/home/kux/workspace/src/other/django/django/core/handlers/base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "/home/kux/workspace/src/other/django/django/contrib/admin/options.py" in wrapper 366. return self.admin_site.admin_view(view)(*args, **kwargs) File "/home/kux/workspace/src/other/django/django/utils/decorators.py" in _wrapped_view 91. response = view_func(request, *args, **kwargs) File "/home/kux/workspace/src/other/django/django/views/decorators/cache.py" in _wrapped_view_func 89. response = view_func(request, *args, **kwargs) File "/home/kux/workspace/src/other/django/django/contrib/admin/sites.py" in inner 196. return view(request, *args, **kwargs) File "/home/kux/workspace/src/other/django/django/db/transaction.py" in inner 209. return func(*args, **kwargs) File "/home/kux/workspace/src/other/django-cms/cms/admin/pageadmin.py" in wrap 154. Page.objects.db_manager(router.db_for_write(Page))\ File "/home/kux/workspace/src/other/django/django/db/models/query.py" in exists 562. return self.query.has_results(using=self.db) File "/home/kux/workspace/src/other/django/django/db/models/sql/query.py" in has_results 441. return bool(compiler.execute_sql(SINGLE)) File "/home/kux/workspace/src/other/django/django/db/models/sql/compiler.py" in execute_sql 818. cursor.execute(sql, params) File "/home/kux/workspace/src/other/django/django/db/backends/util.py" in execute 40. return self.cursor.execute(sql, params) File "/home/kux/workspace/src/other/django/django/db/backends/mysql/base.py" in execute 114. return self.cursor.execute(query, args) File "/home/kux/workspace/envs/hb23/local/lib/python2.7/site-packages/MySQLdb/cursors.py" in execute 174. self.errorhandler(self, exc, value) File "/home/kux/workspace/envs/hb23/local/lib/python2.7/site-packages/MySQLdb/connections.py" in defaulterrorhandler 36. raise errorclass, errorvalue Exception Type: DatabaseError at /admin/cms/page/add/ Exception Value: (1290, 'The MySQL server is running with the --read-only option so it cannot execute this statement') Looking through the source code I found that django.db.models.query.QuerySet.select_for_update doesn't set the _for_write attribute before cloning the queryset. Is this intended behaviour? If not, the following patch would fix the issue: --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -663,6 +663,7 @@ class QuerySet(object): """ # Default to false for nowait nowait = kwargs.pop('nowait', False) + self._for_write = True obj = self._clone() obj.query.select_for_update = True obj.query.select_for_update_nowait = nowait Note: I'm running django 1.4.1 Regards, Alex -- You received this message because you are subscribed to the Google Groups "Django developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers?hl=en. For more options, visit https://groups.google.com/groups/opt_out.