mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
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.
This commit is contained in:
committed by
Sarah Boyce
parent
53e674d574
commit
1005c2abd1
@@ -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"
|
||||
),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user