﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
26026	EmptyQuerySet isinstance check broken with not QuerySet datatypes	Vladimir Prokhoda	Anderson Resende	"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()

}}}
"	Bug	closed	Database layer (models, ORM)	dev	Normal	fixed			Accepted	1	0	0	0	1	0
