mirror of
https://github.com/django/django.git
synced 2025-03-13 10:50:55 +00:00
[1.6.x] Fixed #14786 -- Fixed get_db_prep_lookup calling get_prep_value twice if prepared is False.
Thanks homm for the report and Aramgutang and lrekucki for work on the patch. Backport of f19a3669b8 from master
This commit is contained in:
parent
ef1259342b
commit
10d15f79e5
@ -385,6 +385,7 @@ class Field(object):
|
|||||||
"""
|
"""
|
||||||
if not prepared:
|
if not prepared:
|
||||||
value = self.get_prep_lookup(lookup_type, value)
|
value = self.get_prep_lookup(lookup_type, value)
|
||||||
|
prepared = True
|
||||||
if hasattr(value, 'get_compiler'):
|
if hasattr(value, 'get_compiler'):
|
||||||
value = value.get_compiler(connection=connection)
|
value = value.get_compiler(connection=connection)
|
||||||
if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
|
if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
|
||||||
|
@ -494,3 +494,21 @@ class GenericIPAddressFieldTests(test.TestCase):
|
|||||||
model_field = models.GenericIPAddressField(protocol='IPv6')
|
model_field = models.GenericIPAddressField(protocol='IPv6')
|
||||||
form_field = model_field.formfield()
|
form_field = model_field.formfield()
|
||||||
self.assertRaises(ValidationError, form_field.clean, '127.0.0.1')
|
self.assertRaises(ValidationError, form_field.clean, '127.0.0.1')
|
||||||
|
|
||||||
|
|
||||||
|
class CustomFieldTests(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_14786(self):
|
||||||
|
"""
|
||||||
|
Regression test for #14786 -- Test that field values are not prepared
|
||||||
|
twice in get_db_prep_lookup().
|
||||||
|
"""
|
||||||
|
prepare_count = [0]
|
||||||
|
class NoopField(models.TextField):
|
||||||
|
def get_prep_value(self, value):
|
||||||
|
prepare_count[0] += 1
|
||||||
|
return super(NoopField, self).get_prep_value(value)
|
||||||
|
|
||||||
|
field = NoopField()
|
||||||
|
field.get_db_prep_lookup('exact', 'TEST', connection=connection, prepared=False)
|
||||||
|
self.assertEqual(prepare_count[0], 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user