#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 , 16 years ago
| milestone: | → 1.2 |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 16 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.