Author: kmtracey
Date: 2011-11-13 07:09:08 -0800 (Sun, 13 Nov 2011)
New Revision: 17093

Modified:
   django/trunk/django/db/models/sql/query.py
   django/trunk/tests/regressiontests/model_regress/tests.py
Log:
Fixed #13640: Avoid generating an exception when a model has an attribute named 
'evaluate'. Thanks LukaszKorzybski and tobias.

Modified: django/trunk/django/db/models/sql/query.py
===================================================================
--- django/trunk/django/db/models/sql/query.py  2011-11-13 00:43:02 UTC (rev 
17092)
+++ django/trunk/django/db/models/sql/query.py  2011-11-13 15:09:08 UTC (rev 
17093)
@@ -14,6 +14,7 @@
 from django.utils.tree import Node
 from django.db import connections, DEFAULT_DB_ALIAS
 from django.db.models import signals
+from django.db.models.expressions import ExpressionNode
 from django.db.models.fields import FieldDoesNotExist
 from django.db.models.query_utils import InvalidQuery
 from django.db.models.sql import aggregates as base_aggregates_module
@@ -1064,7 +1065,7 @@
             value = True
         elif callable(value):
             value = value()
-        elif hasattr(value, 'evaluate'):
+        elif isinstance(value, ExpressionNode):
             # If value is a query expression, evaluate it
             value = SQLEvaluator(value, self)
             having_clause = value.contains_aggregate

Modified: django/trunk/tests/regressiontests/model_regress/tests.py
===================================================================
--- django/trunk/tests/regressiontests/model_regress/tests.py   2011-11-13 
00:43:02 UTC (rev 17092)
+++ django/trunk/tests/regressiontests/model_regress/tests.py   2011-11-13 
15:09:08 UTC (rev 17093)
@@ -164,8 +164,23 @@
             1
         )
 
+
 class ModelValidationTest(TestCase):
     def test_pk_validation(self):
         one = NonAutoPK.objects.create(name="one")
         again = NonAutoPK(name="one")
         self.assertRaises(ValidationError, again.validate_unique)
+
+
+class EvaluateMethodTest(TestCase):
+    """
+    Regression test for #13640: cannot filter by objects with 'evaluate' attr
+    """
+
+    def test_model_with_evaluate_method(self):
+        """
+        Ensures that you can filter by objects that have an 'evaluate' attr
+        """
+        dept = Department.objects.create(pk=1, name='abc')
+        dept.evaluate = 'abc'
+        Worker.objects.filter(department=dept)

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to