#13250 closed (fixed)
auth.Message ignores directions from database router
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.2-beta |
Severity: | Keywords: | multidb, orm | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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).
As far as I can tell, all reads get directed to the read_only_user and all writes get detected to read_write_user. That is, until contrib.Admin tries to create a new user message for a save() which for tries to write with the read_only_user and fails.
When overriding auth.Message.save() with an empty function, the admin interface resumes working as expected, with reads and writes being sent to the appropriate databases.
From what I guess by looking at the traceback, RelatedManager
is overriding get_query_set()
to set the query-set's DB. But when the create()
call gets down to models.query.QuerySet.create()
, obj.save()
(line 350) is called, and forces using
to self.db, negating any direction from the Router.
Change History (3)
comment:1 by , 15 years ago
milestone: | → 1.2 |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 15 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
This looks like an oversight in the create() call on foreign keys -- the write database isn't being correctly selected on the create call. Strangely, get_or_create() *is* implemented correctly. The fix is trivial; I just need to find the missing test case.