diff options
| author | Stefan R. Filipek <srfilipek@gmail.com> | 2018-05-10 20:42:44 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-05-10 20:42:44 -0400 |
| commit | a5a2ceeb453b86caaf01687342984f372428beb8 (patch) | |
| tree | 487d4dcbc5122d74adc0f5a99657e2ac329a594e /django | |
| parent | 9c4ea63e878c053600c284e32d5f32d27a59b63a (diff) | |
Fixed #27629 -- Added router.allow_relation() calls for assignments between unsaved model instances.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/fields/related_descriptors.py | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py index f9b770fade..850ea99fa1 100644 --- a/django/db/models/fields/related_descriptors.py +++ b/django/db/models/fields/related_descriptors.py @@ -205,11 +205,10 @@ class ForwardManyToOneDescriptor: elif value is not None: if instance._state.db is None: instance._state.db = router.db_for_write(instance.__class__, instance=value) - elif value._state.db is None: + if value._state.db is None: value._state.db = router.db_for_write(value.__class__, instance=instance) - elif value._state.db is not None and instance._state.db is not None: - if not router.allow_relation(value, instance): - raise ValueError('Cannot assign "%r": the current database router prevents this relation.' % value) + if not router.allow_relation(value, instance): + raise ValueError('Cannot assign "%r": the current database router prevents this relation.' % value) remote_field = self.field.remote_field # If we're setting the value of a OneToOneField to None, we need to clear @@ -451,11 +450,10 @@ class ReverseOneToOneDescriptor: else: if instance._state.db is None: instance._state.db = router.db_for_write(instance.__class__, instance=value) - elif value._state.db is None: + if value._state.db is None: value._state.db = router.db_for_write(value.__class__, instance=instance) - elif value._state.db is not None and instance._state.db is not None: - if not router.allow_relation(value, instance): - raise ValueError('Cannot assign "%r": the current database router prevents this relation.' % value) + if not router.allow_relation(value, instance): + raise ValueError('Cannot assign "%r": the current database router prevents this relation.' % value) related_pk = tuple(getattr(instance, field.attname) for field in self.related.field.foreign_related_fields) # Set the value of the related field to the value of the related object's related field |
