summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorStefan R. Filipek <srfilipek@gmail.com>2018-05-10 20:42:44 -0400
committerTim Graham <timograham@gmail.com>2018-05-10 20:42:44 -0400
commita5a2ceeb453b86caaf01687342984f372428beb8 (patch)
tree487d4dcbc5122d74adc0f5a99657e2ac329a594e /django
parent9c4ea63e878c053600c284e32d5f32d27a59b63a (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.py14
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