summaryrefslogtreecommitdiff
path: root/django/db/models/fields/generated.py
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2023-11-12 20:33:06 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-11-14 20:22:07 +0100
commitc705625ebff0141ed2b95dd3c8174bda8270a47f (patch)
tree95d7af823fdf984e00a45abdc2ba16bb40d31d32 /django/db/models/fields/generated.py
parent5875f03ce61b85dfd9ad34f7b871c231c358d432 (diff)
Refs #34944 -- Propagated system checks for GeneratedField.output_field.
Diffstat (limited to 'django/db/models/fields/generated.py')
-rw-r--r--django/db/models/fields/generated.py36
1 files changed, 35 insertions, 1 deletions
diff --git a/django/db/models/fields/generated.py b/django/db/models/fields/generated.py
index ce811789c3..9a73b7fe37 100644
--- a/django/db/models/fields/generated.py
+++ b/django/db/models/fields/generated.py
@@ -63,11 +63,45 @@ class GeneratedField(Field):
def check(self, **kwargs):
databases = kwargs.get("databases") or []
- return [
+ errors = [
*super().check(**kwargs),
*self._check_supported(databases),
*self._check_persistence(databases),
]
+ output_field_clone = self.output_field.clone()
+ output_field_clone.model = self.model
+ output_field_checks = output_field_clone.check(databases=databases)
+ if output_field_checks:
+ separator = "\n "
+ error_messages = separator.join(
+ f"{output_check.msg} ({output_check.id})"
+ for output_check in output_field_checks
+ if isinstance(output_check, checks.Error)
+ )
+ if error_messages:
+ errors.append(
+ checks.Error(
+ "GeneratedField.output_field has errors:"
+ f"{separator}{error_messages}",
+ obj=self,
+ id="fields.E223",
+ )
+ )
+ warning_messages = separator.join(
+ f"{output_check.msg} ({output_check.id})"
+ for output_check in output_field_checks
+ if isinstance(output_check, checks.Warning)
+ )
+ if warning_messages:
+ errors.append(
+ checks.Warning(
+ "GeneratedField.output_field has warnings:"
+ f"{separator}{warning_messages}",
+ obj=self,
+ id="fields.W224",
+ )
+ )
+ return errors
def _check_supported(self, databases):
errors = []