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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.