1
0
mirror of https://github.com/django/django.git synced 2025-03-01 20:44:55 +00:00

Refs #34936 -- Added test for altering DecimalField with db_default to non-nullable.

This commit is contained in:
David Sanders 2023-10-31 22:37:40 +11:00 committed by Mariusz Felisiak
parent 208870b612
commit 1944f490f9

View File

@ -1,4 +1,5 @@
import math import math
from decimal import Decimal
from django.core.exceptions import FieldDoesNotExist from django.core.exceptions import FieldDoesNotExist
from django.db import IntegrityError, connection, migrations, models, transaction from django.db import IntegrityError, connection, migrations, models, transaction
@ -2210,6 +2211,43 @@ class OperationTests(OperationTestBase):
pony = project_state.apps.get_model(app_label, "pony").objects.create(weight=1) pony = project_state.apps.get_model(app_label, "pony").objects.create(weight=1)
self.assertIsNone(pony.green) self.assertIsNone(pony.green)
def test_alter_field_change_nullable_to_decimal_database_default_not_null(self):
app_label = "test_alflcntdddn"
project_state = self.set_up_test_model(app_label)
operation_1 = migrations.AddField(
"Pony",
"height",
models.DecimalField(null=True, max_digits=5, decimal_places=2),
)
operation_2 = migrations.AlterField(
"Pony",
"height",
models.DecimalField(
max_digits=5, decimal_places=2, db_default=Decimal("12.22")
),
)
table_name = f"{app_label}_pony"
self.assertColumnNotExists(table_name, "height")
# Add field.
new_state = project_state.clone()
operation_1.state_forwards(app_label, new_state)
with connection.schema_editor() as editor:
operation_1.database_forwards(app_label, editor, project_state, new_state)
self.assertColumnExists(table_name, "height")
old_pony = new_state.apps.get_model(app_label, "pony").objects.create(weight=1)
self.assertIsNone(old_pony.height)
# Alter field.
project_state, new_state = new_state, new_state.clone()
operation_2.state_forwards(app_label, new_state)
with connection.schema_editor() as editor:
operation_2.database_forwards(app_label, editor, project_state, new_state)
old_pony.refresh_from_db()
self.assertEqual(old_pony.height, Decimal("12.22"))
pony = new_state.apps.get_model(app_label, "pony").objects.create(weight=2)
if not connection.features.can_return_columns_from_insert:
pony.refresh_from_db()
self.assertEqual(pony.height, Decimal("12.22"))
@skipIfDBFeature("interprets_empty_strings_as_nulls") @skipIfDBFeature("interprets_empty_strings_as_nulls")
def test_alter_field_change_blank_nullable_database_default_to_not_null(self): def test_alter_field_change_blank_nullable_database_default_to_not_null(self):
app_label = "test_alflcbnddnn" app_label = "test_alflcbnddnn"