diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-11-12 20:33:06 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-11-14 20:22:07 +0100 |
| commit | c705625ebff0141ed2b95dd3c8174bda8270a47f (patch) | |
| tree | 95d7af823fdf984e00a45abdc2ba16bb40d31d32 /django | |
| parent | 5875f03ce61b85dfd9ad34f7b871c231c358d432 (diff) | |
Refs #34944 -- Propagated system checks for GeneratedField.output_field.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/fields/__init__.py | 2 | ||||
| -rw-r--r-- | django/db/models/fields/generated.py | 36 |
2 files changed, 37 insertions, 1 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 205a41c193..ce3bebb591 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -286,6 +286,8 @@ class Field(RegisterLookupMixin): Check if field name is valid, i.e. 1) does not end with an underscore, 2) does not contain "__" and 3) is not "pk". """ + if self.name is None: + return [] if self.name.endswith("_"): return [ checks.Error( 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 = [] |
