Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #13640: Avoid generating an exception when a model has an attri…

…bute named 'evaluate'. Thanks LukaszKorzybski and tobias.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17093 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit b8353016b7d6a4046f4c30017987c2e75597285b 1 parent 0db571b
@kmtracey kmtracey authored
View
3  django/db/models/sql/query.py
@@ -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 @@ def add_filter(self, filter_expr, connector=AND, negate=False, trim=False,
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
View
15 tests/regressiontests/model_regress/tests.py
@@ -164,8 +164,23 @@ def test_timezones(self):
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)
Please sign in to comment.
Something went wrong with that request. Please try again.