Fixed #11886 -- Corrected handling of F() expressions that use parentheses. Thanks to Brent Hagany for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11581 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f3af2d9883
commit
d56c1ab7f0
|
@ -66,7 +66,7 @@ class SQLEvaluator(object):
|
||||||
else:
|
else:
|
||||||
sql, params = '%s', (child,)
|
sql, params = '%s', (child,)
|
||||||
|
|
||||||
if hasattr(child, 'children') > 1:
|
if len(getattr(child, 'children', [])) > 1:
|
||||||
format = '(%s)'
|
format = '(%s)'
|
||||||
else:
|
else:
|
||||||
format = '%s'
|
format = '%s'
|
||||||
|
|
|
@ -56,6 +56,16 @@ __test__ = {'API_TESTS': """
|
||||||
>>> company_query
|
>>> company_query
|
||||||
[{'num_chairs': 2302, 'name': u'Example Inc.', 'num_employees': 2300}, {'num_chairs': 5, 'name': u'Foobar Ltd.', 'num_employees': 3}, {'num_chairs': 34, 'name': u'Test GmbH', 'num_employees': 32}]
|
[{'num_chairs': 2302, 'name': u'Example Inc.', 'num_employees': 2300}, {'num_chairs': 5, 'name': u'Foobar Ltd.', 'num_employees': 3}, {'num_chairs': 34, 'name': u'Test GmbH', 'num_employees': 32}]
|
||||||
|
|
||||||
|
# Law of order of operations is followed
|
||||||
|
>>> _ =company_query.update(num_chairs=F('num_employees') + 2 * F('num_employees'))
|
||||||
|
>>> company_query
|
||||||
|
[{'num_chairs': 6900, 'name': u'Example Inc.', 'num_employees': 2300}, {'num_chairs': 9, 'name': u'Foobar Ltd.', 'num_employees': 3}, {'num_chairs': 96, 'name': u'Test GmbH', 'num_employees': 32}]
|
||||||
|
|
||||||
|
# Law of order of operations can be overridden by parentheses
|
||||||
|
>>> _ =company_query.update(num_chairs=((F('num_employees') + 2) * F('num_employees')))
|
||||||
|
>>> company_query
|
||||||
|
[{'num_chairs': 5294600, 'name': u'Example Inc.', 'num_employees': 2300}, {'num_chairs': 15, 'name': u'Foobar Ltd.', 'num_employees': 3}, {'num_chairs': 1088, 'name': u'Test GmbH', 'num_employees': 32}]
|
||||||
|
|
||||||
# The relation of a foreign key can become copied over to an other foreign key.
|
# The relation of a foreign key can become copied over to an other foreign key.
|
||||||
>>> Company.objects.update(point_of_contact=F('ceo'))
|
>>> Company.objects.update(point_of_contact=F('ceo'))
|
||||||
3
|
3
|
||||||
|
|
Loading…
Reference in New Issue