﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
13724	Calling QuerySet.delete() through a relation the DB router is ignored.	Chris Targett <chris@…>	Paul Collins	"I'm using django-multidb-router from here: http://github.com/jbalogh/django-multidb-router With two database definitions, a read_only_user and a read_write_user (with the intentions of having multiple read-only definitions).

When calling QuerySet.delete() through a relation query is sent to the read_only user. Upon inspection it appears MasterSlaveRouter.allow_relation() isn't even called.

Example: 
{{{
from django.db import models

class ModelA(models.Model):
    value = models.IntegerField(default=0)

class ModelB(models.Model):
    value = models.IntegerField(default=0)
    a = models.ManyToManyField(ModelA)


>>> a = ModelA()
>>> a.save()
>>> b = ModelB()
>>> b.a.add(a)
>>> b.a.all()
[<ModelA: ModelA object>]
>>> b.a.all().delete()
Traceback (most recent call last):
  File ""<console>"", line 1, in ?
  File ""/home/ctargett/d/proj/code/django/db/models/query.py"", line 445, in delete
    delete_objects(seen_objs, del_query.db)
  File ""/home/ctargett/d/proj/code/django/db/models/query.py"", line 1335, in delete_objects
    del_query.delete_batch(pk_list, using=using)
  File ""/home/ctargett/d/proj/code/django/db/models/sql/subqueries.py"", line 41, in delete_batch
    self.do_query(self.model._meta.db_table, where, using=using)
  File ""/home/ctargett/d/proj/code/django/db/models/sql/subqueries.py"", line 27, in do_query
    self.get_compiler(using).execute_sql(None)
  File ""/home/ctargett/d/proj/code/django/db/models/sql/compiler.py"", line 727, in execute_sql
    cursor.execute(sql, params)
  File ""/home/ctargett/d/proj/code/django/db/backends/util.py"", line 15, in execute
    return self.cursor.execute(sql, params)
  File ""/home/ctargett/d/proj/code/django/db/backends/mysql/base.py"", line 86, in execute
    return self.cursor.execute(query, args)
  File ""/usr/lib64/python2.4/site-packages/MySQLdb/cursors.py"", line 166, in execute
    self.errorhandler(self, exc, value)
  File ""/usr/lib64/python2.4/site-packages/MySQLdb/connections.py"", line 35, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (1142, ""DELETE command denied to user 'read_user'@'localhost' for table 'testapp_modelb_a'"")
}}}

"	Bug	closed	Database layer (models, ORM)	1.3	Normal	fixed	multidb	paul.collins.iii@…	Accepted	1	0	0	1	0	0
