mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	Fixed #34877 -- Fixed migrations crash when adding GeneratedField with output_field with params.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							5e4b75b78a
						
					
				
				
					commit
					e7e8eb44a3
				
			| @@ -159,3 +159,6 @@ class GeneratedField(Field): | |||||||
|  |  | ||||||
|     def db_parameters(self, connection): |     def db_parameters(self, connection): | ||||||
|         return self.output_field.db_parameters(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), |             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): |     def test_model_with_params(self): | ||||||
|         m = self.params_model.objects.create() |         m = self.params_model.objects.create() | ||||||
|         m = self._refresh_if_needed(m) |         m = self._refresh_if_needed(m) | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ import datetime | |||||||
| import itertools | import itertools | ||||||
| import unittest | import unittest | ||||||
| from copy import copy | from copy import copy | ||||||
|  | from decimal import Decimal | ||||||
| from unittest import mock | from unittest import mock | ||||||
|  |  | ||||||
| from django.core.exceptions import FieldError | from django.core.exceptions import FieldError | ||||||
| @@ -52,7 +53,7 @@ from django.db.models import ( | |||||||
|     Value, |     Value, | ||||||
| ) | ) | ||||||
| from django.db.models.fields.json import KT, KeyTextTransform | 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.models.indexes import IndexExpression | ||||||
| from django.db.transaction import TransactionManagementError, atomic | from django.db.transaction import TransactionManagementError, atomic | ||||||
| from django.test import TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature | from django.test import TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature | ||||||
| @@ -829,6 +830,23 @@ class SchemaTests(TransactionTestCase): | |||||||
|             False, |             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") |     @isolate_apps("schema") | ||||||
|     def test_add_auto_field(self): |     def test_add_auto_field(self): | ||||||
|         class AddAutoFieldModel(Model): |         class AddAutoFieldModel(Model): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user