summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCollin Anderson <cmawebsite@gmail.com>2014-10-27 21:36:47 -0400
committerAnssi Kääriäinen <akaariai@gmail.com>2014-10-28 10:13:50 +0200
commitae7cb992bca5d211c9456487feb21b84387006eb (patch)
tree66e172fa243d86aed830aae454df6121dd21830b
parent00aa562884a418c4ee20e223ab82c3455997ee7d (diff)
Fixed #23721 -- check_related_objects without calling __iter__
Refs #14334
-rw-r--r--django/db/models/sql/query.py5
-rw-r--r--tests/queries/models.py4
2 files changed, 6 insertions, 3 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index b6690e4526..4560989e60 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1102,12 +1102,11 @@ class Query(object):
'Cannot use QuerySet for "%s": Use a QuerySet for "%s".' %
(value.model._meta.model_name, opts.object_name)
)
+ elif hasattr(value, '_meta'):
+ self.check_query_object_type(value, opts)
elif hasattr(value, '__iter__'):
for v in value:
self.check_query_object_type(v, opts)
- else:
- # expecting single model instance here
- self.check_query_object_type(value, opts)
def build_lookup(self, lookups, lhs, rhs):
lookups = lookups[:]
diff --git a/tests/queries/models.py b/tests/queries/models.py
index bb3d52a635..fbd6221732 100644
--- a/tests/queries/models.py
+++ b/tests/queries/models.py
@@ -408,6 +408,10 @@ class ObjectA(models.Model):
def __str__(self):
return self.name
+ def __iter__(self):
+ # Ticket #23721
+ assert False, 'type checking should happen without calling model __iter__'
+
class ProxyObjectA(ObjectA):
class Meta: