mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #34877 -- Fixed migrations crash when adding GeneratedField with output_field with params.
This commit is contained in:
parent
5e4b75b78a
commit
e7e8eb44a3
@ -159,3 +159,6 @@ class GeneratedField(Field):
|
||||
|
||||
def db_parameters(self, connection):
|
||||
return self.output_field.db_parameters(connection)
|
||||
|
||||
def db_type_parameters(self, connection):
|
||||
return self.output_field.db_type_parameters(connection)
|
||||
|
@ -181,6 +181,13 @@ class GeneratedFieldTestMixin:
|
||||
field._resolved_expression.output_field.db_type(connection),
|
||||
)
|
||||
|
||||
@skipUnlessDBFeature("supports_collation_on_charfield")
|
||||
def test_db_type_parameters(self):
|
||||
db_type_parameters = self.output_field_model._meta.get_field(
|
||||
"lower_name"
|
||||
).db_type_parameters(connection)
|
||||
self.assertEqual(db_type_parameters["max_length"], 11)
|
||||
|
||||
def test_model_with_params(self):
|
||||
m = self.params_model.objects.create()
|
||||
m = self._refresh_if_needed(m)
|
||||
|
@ -2,6 +2,7 @@ import datetime
|
||||
import itertools
|
||||
import unittest
|
||||
from copy import copy
|
||||
from decimal import Decimal
|
||||
from unittest import mock
|
||||
|
||||
from django.core.exceptions import FieldError
|
||||
@ -52,7 +53,7 @@ from django.db.models import (
|
||||
Value,
|
||||
)
|
||||
from django.db.models.fields.json import KT, KeyTextTransform
|
||||
from django.db.models.functions import Abs, Cast, Collate, Lower, Random, Upper
|
||||
from django.db.models.functions import Abs, Cast, Collate, Lower, Random, Round, Upper
|
||||
from django.db.models.indexes import IndexExpression
|
||||
from django.db.transaction import TransactionManagementError, atomic
|
||||
from django.test import TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature
|
||||
@ -829,6 +830,23 @@ class SchemaTests(TransactionTestCase):
|
||||
False,
|
||||
)
|
||||
|
||||
@isolate_apps("schema")
|
||||
@skipUnlessDBFeature("supports_stored_generated_columns")
|
||||
def test_add_generated_field_with_output_field(self):
|
||||
class GeneratedFieldOutputFieldModel(Model):
|
||||
price = DecimalField(max_digits=7, decimal_places=2)
|
||||
vat_price = GeneratedField(
|
||||
expression=Round(F("price") * Value(Decimal("1.22")), 2),
|
||||
db_persist=True,
|
||||
output_field=DecimalField(max_digits=8, decimal_places=2),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
app_label = "schema"
|
||||
|
||||
with connection.schema_editor() as editor:
|
||||
editor.create_model(GeneratedFieldOutputFieldModel)
|
||||
|
||||
@isolate_apps("schema")
|
||||
def test_add_auto_field(self):
|
||||
class AddAutoFieldModel(Model):
|
||||
|
Loading…
Reference in New Issue
Block a user