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.