Loading django/db/models/fields/__init__.py +1 −0 Original line number Diff line number Diff line Loading @@ -499,6 +499,7 @@ class Field(object): """ if not prepared: value = self.get_prep_lookup(lookup_type, value) prepared = True if hasattr(value, 'get_compiler'): value = value.get_compiler(connection=connection) if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'): Loading tests/model_fields/tests.py +18 −0 Original line number Diff line number Diff line Loading @@ -663,3 +663,21 @@ class PromiseTest(test.TestCase): self.assertIsInstance( URLField().get_prep_value(lazy_func()), six.text_type) 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
django/db/models/fields/__init__.py +1 −0 Original line number Diff line number Diff line Loading @@ -499,6 +499,7 @@ class Field(object): """ if not prepared: value = self.get_prep_lookup(lookup_type, value) prepared = True if hasattr(value, 'get_compiler'): value = value.get_compiler(connection=connection) if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'): Loading
tests/model_fields/tests.py +18 −0 Original line number Diff line number Diff line Loading @@ -663,3 +663,21 @@ class PromiseTest(test.TestCase): self.assertIsInstance( URLField().get_prep_value(lazy_func()), six.text_type) 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)