Opened 9 years ago
Closed 9 years ago
#26026 closed Bug (fixed)
EmptyQuerySet isinstance check broken with not QuerySet datatypes
Description ¶
isinstance check on any instance, that is not QuerySet (actually anything without .query attribute) and django.db.models.query.EmptyQuerySet throws AttributeError.
Code to reproduce.
In [9]: from django.db.models.query import EmptyQuerySet In [10]: isinstance(1, EmptyQuerySet) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-10-79a6a197988a> in <module>() ----> 1 isinstance(1, EmptyQuerySet) /home/vprokhoda/Envs/ADMIN2/local/lib/python2.7/site-packages/django/db/models/query.pyc in __instancecheck__(self, instance) 1171 class InstanceCheckMeta(type): 1172 def __instancecheck__(self, instance): -> 1173 return instance.query.is_empty() 1174 1175 AttributeError: 'int' object has no attribute 'query' In [11]: In [11]: import django In [12]: django.__version__ Out[12]: '1.9'
Quick and dirty fix is
(django)vprokhoda@tests$ git diff diff --git a/django/db/models/query.py b/django/db/models/query.py index 45c0320..0cc5f94 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -1171,7 +1171,7 @@ class QuerySet(object): class InstanceCheckMeta(type): def __instancecheck__(self, instance): - return instance.query.is_empty() + return hasattr(instance, 'query') and instance.query.is_empty()
Change History (9)
comment:1 by , 9 years ago
Type: | Uncategorized → Bug |
---|
comment:2 by , 9 years ago
Component: | Uncategorized → Database layer (models, ORM) |
---|---|
Easy pickings: | set |
Triage Stage: | Unreviewed → Accepted |
comment:3 by , 9 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:4 by , 9 years ago
Version: | 1.9 → master |
---|
comment:6 by , 9 years ago
Has patch: | set |
---|
comment:7 by , 9 years ago
Patch needs improvement: | set |
---|
Left some comments on the PR, please uncheck Patch needs improvement once they are addressed.
comment:8 by , 9 years ago
Patch needs improvement: | unset |
---|
Note:
See TracTickets
for help on using tickets.
I think the appropriate fix should involve making sure
isinstance(instance, QuerySet)
instead of checking forquery
attribute existence which fails ifnot hasattr(instance.query, 'is_empty') or not callable(instance.query.is_empty)
.