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 | |
| parent | 1564e42ad397021093585147875a21dae1a3b3fc (diff) | |
Fixed #12952 -- Adjusted admin log change messages to use form labels instead of field names.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/models.py | 2 | ||||
| -rw-r--r-- | django/contrib/admin/utils.py | 26 |
2 files changed, 24 insertions, 4 deletions
diff --git a/django/contrib/admin/models.py b/django/contrib/admin/models.py index f0138435ca..eed5f51c57 100644 --- a/django/contrib/admin/models.py +++ b/django/contrib/admin/models.py @@ -114,7 +114,7 @@ class LogEntry(models.Model): elif 'changed' in sub_message: sub_message['changed']['fields'] = get_text_list( - sub_message['changed']['fields'], gettext('and') + [gettext(field_name) for field_name in sub_message['changed']['fields']], gettext('and') ) if 'name' in sub_message['changed']: sub_message['changed']['name'] = gettext(sub_message['changed']['name']) 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 |
