diff options
| author | Collin Anderson <cmawebsite@gmail.com> | 2014-10-27 21:36:47 -0400 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2014-10-28 10:13:50 +0200 |
| commit | ae7cb992bca5d211c9456487feb21b84387006eb (patch) | |
| tree | 66e172fa243d86aed830aae454df6121dd21830b | |
| parent | 00aa562884a418c4ee20e223ab82c3455997ee7d (diff) | |
Fixed #23721 -- check_related_objects without calling __iter__
Refs #14334
| -rw-r--r-- | django/db/models/sql/query.py | 5 | ||||
| -rw-r--r-- | tests/queries/models.py | 4 |
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: |
