summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sanders <shang.xiao.sanders@gmail.com>2023-10-31 22:37:40 +1100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2024-02-01 08:13:26 +0100
commit06b05c748ff4079411b7e570311de879671399df (patch)
treeee23fbea882efbb1b142f904e2b91b4fc7a2421b
parentf1fbd061ac34f0afdaac4a5c7db099c39b43cb4a (diff)
[5.0.x] Refs #34936 -- Added test for altering DecimalField with db_default to non-nullable.
Backport of 1944f490f91e44e1378d53420b64a78163aea815 from main
-rw-r--r--tests/migrations/test_operations.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index 18121bd4b6..462170bd4b 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -1,4 +1,5 @@
import math
+from decimal import Decimal
from django.core.exceptions import FieldDoesNotExist
from django.db import IntegrityError, connection, migrations, models, transaction
@@ -2219,6 +2220,43 @@ class OperationTests(OperationTestBase):
pony = project_state.apps.get_model(app_label, "pony").objects.create(weight=1)
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")
def test_alter_field_change_blank_nullable_database_default_to_not_null(self):
app_label = "test_alflcbnddnn"