diff options
| author | Mark Gensler <mark.gensler@protonmail.com> | 2024-06-25 15:04:48 +0100 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-07-04 11:47:20 +0200 |
| commit | 2da007737cda936ef2ee87271bf9e69eb93cd3fe (patch) | |
| tree | 154dd2a4d8737327339ee73db12dfea4ff15e3a2 /tests/model_fields/models.py | |
| parent | 3b5d04f879f6d3d8ff7f5d82b4a7c801b71b2fd0 (diff) | |
[5.1.x] Fixed #35560 -- Made Model.full_clean() ignore GeneratedFields for constraints.
Accessing generated field values on unsaved models caused a crash when
validating CheckConstraints and UniqueConstraints with expressions.
Backport of 1005c2abd1ef0c156f449641e38c33e473989d37 from main.
Diffstat (limited to 'tests/model_fields/models.py')
| -rw-r--r-- | tests/model_fields/models.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py index 652c808b40..d9811ba164 100644 --- a/tests/model_fields/models.py +++ b/tests/model_fields/models.py @@ -609,3 +609,79 @@ class GeneratedModelNullVirtual(models.Model): class Meta: required_db_features = {"supports_virtual_generated_columns"} + + +class GeneratedModelBase(models.Model): + a = models.IntegerField() + a_squared = models.GeneratedField( + expression=F("a") * F("a"), + output_field=models.IntegerField(), + db_persist=True, + ) + + class Meta: + abstract = True + + +class GeneratedModelVirtualBase(models.Model): + a = models.IntegerField() + a_squared = models.GeneratedField( + expression=F("a") * F("a"), + output_field=models.IntegerField(), + db_persist=False, + ) + + class Meta: + abstract = True + + +class GeneratedModelCheckConstraint(GeneratedModelBase): + class Meta: + required_db_features = { + "supports_stored_generated_columns", + "supports_table_check_constraints", + } + constraints = [ + models.CheckConstraint( + condition=models.Q(a__gt=0), + name="Generated model check constraint a > 0", + ) + ] + + +class GeneratedModelCheckConstraintVirtual(GeneratedModelVirtualBase): + class Meta: + required_db_features = { + "supports_virtual_generated_columns", + "supports_table_check_constraints", + } + constraints = [ + models.CheckConstraint( + condition=models.Q(a__gt=0), + name="Generated model check constraint virtual a > 0", + ) + ] + + +class GeneratedModelUniqueConstraint(GeneratedModelBase): + class Meta: + required_db_features = { + "supports_stored_generated_columns", + "supports_table_check_constraints", + } + constraints = [ + models.UniqueConstraint(F("a"), name="Generated model unique constraint a"), + ] + + +class GeneratedModelUniqueConstraintVirtual(GeneratedModelVirtualBase): + class Meta: + required_db_features = { + "supports_virtual_generated_columns", + "supports_expression_indexes", + } + constraints = [ + models.UniqueConstraint( + F("a"), name="Generated model unique constraint virtual a" + ), + ] |
