diff options
| author | sarahboyce <sarahvboyce95@gmail.com> | 2022-09-29 20:19:38 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-09-29 20:32:08 +0200 |
| commit | 1d77b931f7df96ec4d6fa3835fe35547397cca1a (patch) | |
| tree | 8c8efc119c397133daef445169005462518581f7 | |
| parent | 9b0c9821ed4dd9920cc7c5e7b657720d91a89bdc (diff) | |
Refs #32095 -- Added model's Options._non_pk_concrete_field_names property.
| -rw-r--r-- | django/db/models/base.py | 10 | ||||
| -rw-r--r-- | django/db/models/options.py | 14 |
2 files changed, 15 insertions, 9 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index 1f7e5f84aa..cb51ed42c4 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -799,15 +799,7 @@ class Model(metaclass=ModelBase): return update_fields = frozenset(update_fields) - field_names = set() - - for field in self._meta.concrete_fields: - if not field.primary_key: - field_names.add(field.name) - - if field.name != field.attname: - field_names.add(field.attname) - + field_names = self._meta._non_pk_concrete_field_names non_model_fields = update_fields.difference(field_names) if non_model_fields: diff --git a/django/db/models/options.py b/django/db/models/options.py index bff55011dc..b6b8202802 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -89,6 +89,7 @@ class Options: "many_to_many", "concrete_fields", "local_concrete_fields", + "_non_pk_concrete_field_names", "_forward_fields_map", "managers", "managers_map", @@ -983,6 +984,19 @@ class Options: return frozenset(names) @cached_property + def _non_pk_concrete_field_names(self): + """ + Return a set of the non-pk concrete field names defined on the model. + """ + names = [] + for field in self.concrete_fields: + if not field.primary_key: + names.append(field.name) + if field.name != field.attname: + names.append(field.attname) + return frozenset(names) + + @cached_property def db_returning_fields(self): """ Private API intended only to be used by Django itself. |
