1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Refs #30446, Refs #34944 -- Fixed crash when adding GeneratedField with string Value().

This should allow smarter output_field inferring in functions dealing
with text expressions.

Regression in f333e3513e.
This commit is contained in:
Simon Charette 2023-11-07 21:47:37 -05:00 committed by Mariusz Felisiak
parent 5f2f12f61c
commit 8b1acc0440
3 changed files with 19 additions and 1 deletions

View File

@ -1082,7 +1082,7 @@ class Value(SQLiteNumericMixin, Expression):
def _resolve_output_field(self):
if isinstance(self.value, str):
return fields.CharField()
return fields.CharField(max_length=len(self.value))
if isinstance(self.value, bool):
return fields.BooleanField()
if isinstance(self.value, int):

View File

@ -2227,6 +2227,7 @@ class ValueTests(TestCase):
with self.subTest(type=type(value)):
expr = Value(value)
self.assertIsInstance(expr.output_field, output_field_type)
self.assertEqual(Value("foo").output_field.max_length, 3)
def test_resolve_output_field_failure(self):
msg = "Cannot resolve expression type, unknown output_field"

View File

@ -842,6 +842,23 @@ class SchemaTests(TransactionTestCase):
False,
)
@isolate_apps("schema")
@skipUnlessDBFeature("supports_stored_generated_columns")
def test_add_generated_field_with_string_value(self):
class GeneratedFieldStringValueModel(Model):
value = GeneratedField(expression=Value("static string"), db_persist=True)
class Meta:
app_label = "schema"
with CaptureQueriesContext(connection) as ctx:
with connection.schema_editor() as editor:
editor.create_model(GeneratedFieldStringValueModel)
self.assertIs(
any("None" in query["sql"] for query in ctx.captured_queries),
False,
)
@isolate_apps("schema")
@skipUnlessDBFeature("supports_stored_generated_columns")
def test_add_generated_field_with_output_field(self):