mirror of https://github.com/django/django.git
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
This commit is contained in:
parent
56d787df99
commit
2b0c1ea641
|
@ -474,7 +474,7 @@ class ForeignRelatedObjectsDescriptor(object):
|
||||||
def add(self, *objs):
|
def add(self, *objs):
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
if not isinstance(obj, self.model):
|
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)
|
setattr(obj, rel_field.name, self.instance)
|
||||||
obj.save()
|
obj.save()
|
||||||
add.alters_data = True
|
add.alters_data = True
|
||||||
|
@ -636,7 +636,7 @@ def create_many_related_manager(superclass, rel):
|
||||||
(obj, self.instance._state.db, obj._state.db))
|
(obj, self.instance._state.db, obj._state.db))
|
||||||
new_ids.add(obj.pk)
|
new_ids.add(obj.pk)
|
||||||
elif isinstance(obj, Model):
|
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:
|
else:
|
||||||
new_ids.add(obj)
|
new_ids.add(obj)
|
||||||
db = router.db_for_write(self.through, instance=self.instance)
|
db = router.db_for_write(self.through, instance=self.instance)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import, with_statement
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
|
@ -52,7 +52,8 @@ class ManyToManyTests(TestCase):
|
||||||
])
|
])
|
||||||
|
|
||||||
# Adding an object of the wrong type raises TypeError
|
# Adding an object of the wrong type raises TypeError
|
||||||
self.assertRaises(TypeError, a6.publications.add, a5)
|
with self.assertRaisesRegexp(TypeError, "'Publication' instance expected, got <Article.*"):
|
||||||
|
a6.publications.add(a5)
|
||||||
# Add a Publication directly via publications.add by using keyword arguments.
|
# Add a Publication directly via publications.add by using keyword arguments.
|
||||||
p4 = a6.publications.create(title='Highlights for Adults')
|
p4 = a6.publications.create(title='Highlights for Adults')
|
||||||
self.assertQuerysetEqual(a6.publications.all(),
|
self.assertQuerysetEqual(a6.publications.all(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import, with_statement
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
@ -68,7 +68,8 @@ class ManyToOneTests(TestCase):
|
||||||
self.assertQuerysetEqual(self.r2.article_set.all(), ["<Article: Paul's story>"])
|
self.assertQuerysetEqual(self.r2.article_set.all(), ["<Article: Paul's story>"])
|
||||||
|
|
||||||
# Adding an object of the wrong type raises TypeError.
|
# 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 <Reporter.*"):
|
||||||
|
self.r.article_set.add(self.r2)
|
||||||
self.assertQuerysetEqual(self.r.article_set.all(),
|
self.assertQuerysetEqual(self.r.article_set.all(),
|
||||||
[
|
[
|
||||||
"<Article: John's second story>",
|
"<Article: John's second story>",
|
||||||
|
|
Loading…
Reference in New Issue