diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index fbb40d9175..a16f9553c6 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -364,7 +364,7 @@ class ReverseSingleRelatedObjectDescriptor(object): def __set__(self, instance, value): if instance is None: - raise AttributeError("%s must be accessed via instance" % self._field.name) + raise AttributeError("%s must be accessed via instance" % self.field.name) # If null=True, we can assign null here, but otherwise the value needs # to be an instance of the related class. diff --git a/tests/regressiontests/many_to_one_regress/tests.py b/tests/regressiontests/many_to_one_regress/tests.py index 9e04fb4542..481a037139 100644 --- a/tests/regressiontests/many_to_one_regress/tests.py +++ b/tests/regressiontests/many_to_one_regress/tests.py @@ -58,6 +58,10 @@ class ManyToOneRegressionTests(TestCase): self.assertRaises(ValueError, Child, name='xyzzy', parent=None) self.assertRaises(ValueError, Child.objects.create, name='xyzzy', parent=None) + # Trying to assign to unbound attribute raises AttributeError + self.assertRaisesRegexp(AttributeError, "must be accessed via instance", + Child.parent.__set__, None, p) + # Creation using keyword argument should cache the related object. p = Parent.objects.get(name="Parent") c = Child(parent=p)