From b8741c005873396de24a085fe9ab13d2348a306b Mon Sep 17 00:00:00 2001 From: Andrey Kuzminov Date: Wed, 21 Dec 2016 13:13:12 +1300 Subject: [PATCH] Refs #18823 -- Corrected field name in an m2m manager error message. --- django/db/models/fields/related_descriptors.py | 4 +++- tests/m2m_through_regress/tests.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py index 9b693ed196..af6fdc3e25 100644 --- a/django/db/models/fields/related_descriptors.py +++ b/django/db/models/fields/related_descriptors.py @@ -814,15 +814,17 @@ def create_forward_many_to_many_manager(superclass, rel, reverse): self.target_field = self.through._meta.get_field(self.target_field_name) self.core_filters = {} + self.pk_field_names = {} for lh_field, rh_field in self.source_field.related_fields: core_filter_key = '%s__%s' % (self.query_field_name, rh_field.name) self.core_filters[core_filter_key] = getattr(instance, rh_field.attname) + self.pk_field_names[lh_field.name] = rh_field.name self.related_val = self.source_field.get_foreign_related_value(instance) if None in self.related_val: raise ValueError('"%r" needs to have a value for field "%s" before ' 'this many-to-many relationship can be used.' % - (instance, self.source_field_name)) + (instance, self.pk_field_names[self.source_field_name])) # Even if this relation is not to pk, we require still pk value. # The wish is that the instance has been already saved to DB, # although having a pk value isn't a guarantee of that. diff --git a/tests/m2m_through_regress/tests.py b/tests/m2m_through_regress/tests.py index 3ebae1b3d3..b826d2399f 100644 --- a/tests/m2m_through_regress/tests.py +++ b/tests/m2m_through_regress/tests.py @@ -216,7 +216,7 @@ class ToFieldThroughTests(TestCase): def test_m2m_relations_unsable_on_null_to_field(self): nullcar = Car(make=None) msg = ( - '"" needs to have a value for field "car" before this ' + '"" needs to have a value for field "make" before this ' 'many-to-many relationship can be used.' ) with self.assertRaisesMessage(ValueError, msg): @@ -258,7 +258,7 @@ class ToFieldThroughTests(TestCase): def test_add_null_reverse_related(self): nulldriver = Driver.objects.create(name=None) msg = ( - '"" needs to have a value for field "driver" before ' + '"" needs to have a value for field "name" before ' 'this many-to-many relationship can be used.' ) with self.assertRaisesMessage(ValueError, msg):