From 2b0c1ea64155bd3f825b06e266d73c00dbf4196f Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 4 Feb 2012 16:06:09 +0000 Subject: [PATCH] Fixed #17527 -- Improved exception message when adding the wrong type of object to a ManyToManyField. Thanks, guettli and cClaude Paroz. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17437 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/fields/related.py | 4 ++-- tests/modeltests/many_to_many/tests.py | 5 +++-- tests/modeltests/many_to_one/tests.py | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 848fd6ed74..53f9b9f8c2 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -474,7 +474,7 @@ class ForeignRelatedObjectsDescriptor(object): def add(self, *objs): for obj in objs: if not isinstance(obj, self.model): - raise TypeError("'%s' instance expected" % self.model._meta.object_name) + raise TypeError("'%s' instance expected, got %r" % (self.model._meta.object_name, obj)) setattr(obj, rel_field.name, self.instance) obj.save() add.alters_data = True @@ -636,7 +636,7 @@ def create_many_related_manager(superclass, rel): (obj, self.instance._state.db, obj._state.db)) new_ids.add(obj.pk) elif isinstance(obj, Model): - raise TypeError("'%s' instance expected" % self.model._meta.object_name) + raise TypeError("'%s' instance expected, got %r" % (self.model._meta.object_name, obj)) else: new_ids.add(obj) db = router.db_for_write(self.through, instance=self.instance) diff --git a/tests/modeltests/many_to_many/tests.py b/tests/modeltests/many_to_many/tests.py index b00d7da140..9fa524f993 100644 --- a/tests/modeltests/many_to_many/tests.py +++ b/tests/modeltests/many_to_many/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, with_statement from django.test import TestCase @@ -52,7 +52,8 @@ class ManyToManyTests(TestCase): ]) # Adding an object of the wrong type raises TypeError - self.assertRaises(TypeError, a6.publications.add, a5) + with self.assertRaisesRegexp(TypeError, "'Publication' instance expected, got "]) # Adding an object of the wrong type raises TypeError. - self.assertRaises(TypeError, self.r.article_set.add, self.r2) + with self.assertRaisesRegexp(TypeError, "'Article' instance expected, got ",