Opened 3 years ago

Closed 3 years ago

#20337 closed Cleanup/optimization (fixed)

ValueError when database router prevents relation is unclear

Reported by: dloewenherz Owned by: Tim Graham <timograham@…>
Component: Database layer (models, ORM) Version: master
Severity: Normal Keywords: router
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no


I'm using a custom database router to manage queries between two databases.

In my router, the allow_relation method was set incorrectly, and as a result, two models from separate apps weren't allowed to reference each other. The ValueError I received looked like this:

Cannot assign "<ContentType: xxx>": instance is on database "default", value is on database "default

I opened up the source that raised this error, and saw this line:

if not router.allow_relation(value, instance):
    raise ValueError('Cannot assign "%r": instance is on database "%s", value is on database "%s"' % (value, instance._state.db, value._state.db))

The databases that these objects are on had nothing to do with how my router was routing the query, and kind of led me on a wild goose chase until I opened up the source. I would suggest a copy change to something like: "Cannot assign "%r": the current database router prevents this relation."

Change History (3)

comment:1 Changed 3 years ago by anonymous

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

comment:2 Changed 3 years ago by charettes

  • Keywords router added; copy removed
  • Triage Stage changed from Unreviewed to Accepted
  • Type changed from Bug to Cleanup/optimization
  • UI/UX unset
  • Version changed from 1.5 to master

The exception message re-wording makes sense.

comment:3 Changed 3 years ago by Tim Graham <timograham@…>

  • Owner set to Tim Graham <timograham@…>
  • Resolution set to fixed
  • Status changed from new to closed

In 07a73a2714a504ae487112c1679977fccc19b159:

Fixed #20337 -- Clarified error message when database relation is not allowed.

Note: See TracTickets for help on using tickets.
Back to Top