diff options
author | Sanyam Khurana <8039608+CuriousLearner@users.noreply.github.com> | 2019-06-14 21:50:29 +0530 |
---|---|---|
committer | Carlton Gibson <carlton.gibson@noumenal.es> | 2019-06-14 18:20:29 +0200 |
commit | 87f5d07eededc86f8ce1797fdfca7d4903ee0edc (patch) | |
tree | cb44a913de3732b615e76ef0444499558a00ffbd /django/contrib/admin/utils.py | |
parent | 1564e42ad397021093585147875a21dae1a3b3fc (diff) | |
download | django-87f5d07eededc86f8ce1797fdfca7d4903ee0edc.tar.gz |
Fixed #12952 -- Adjusted admin log change messages to use form labels instead of field names.
Diffstat (limited to 'django/contrib/admin/utils.py')
-rw-r--r-- | django/contrib/admin/utils.py | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py index dd6b108ff3..15c8ef865f 100644 --- a/django/contrib/admin/utils.py +++ b/django/contrib/admin/utils.py @@ -489,12 +489,21 @@ def construct_change_message(form, formsets, add): Translations are deactivated so that strings are stored untranslated. Translation happens later on LogEntry access. """ + # Evaluating `form.changed_data` prior to disabling translations is required + # to avoid fields affected by localization from being included incorrectly, + # e.g. where date formats differ such as MM/DD/YYYY vs DD/MM/YYYY. + changed_data = form.changed_data + with translation_override(None): + # Deactivate translations while fetching verbose_name for form + # field labels and using `field_name`, if verbose_name is not provided. + # Translations will happen later on LogEntry access. + changed_field_labels = _get_changed_field_labels_from_form(form, changed_data) + change_message = [] if add: change_message.append({'added': {}}) elif form.changed_data: - change_message.append({'changed': {'fields': form.changed_data}}) - + change_message.append({'changed': {'fields': changed_field_labels}}) if formsets: with translation_override(None): for formset in formsets: @@ -510,7 +519,7 @@ def construct_change_message(form, formsets, add): 'changed': { 'name': str(changed_object._meta.verbose_name), 'object': str(changed_object), - 'fields': changed_fields, + 'fields': _get_changed_field_labels_from_form(formset.forms[0], changed_fields), } }) for deleted_object in formset.deleted_objects: @@ -521,3 +530,14 @@ def construct_change_message(form, formsets, add): } }) return change_message + + +def _get_changed_field_labels_from_form(form, changed_data): + changed_field_labels = [] + for field_name in changed_data: + try: + verbose_field_name = form.fields[field_name].label or field_name + except KeyError: + verbose_field_name = field_name + changed_field_labels.append(str(verbose_field_name)) + return changed_field_labels |