#36801: `construct_change_message`call `form.changed_data` after check if is add
-------------------------------------+-------------------------------------
Reporter: Rodolfo Becerra | Owner: Rodolfo
Type: | Becerra
Cleanup/optimization | Status: assigned
Component: contrib.admin | Version:
Severity: Normal | Resolution:
Keywords: | Triage Stage:
construct_change_message | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Rodolfo Becerra:
Old description:
> This is the currently code of the method `construct_change_message` of
> `django.contrib.admin.utils`
> {{{
> #!python
> def construct_change_message(form, formsets, add):
> """
> Construct a JSON structure describing changes from a changed object.
> 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":
> changed_field_labels}})
> }}}
> If you notice that the `form.changed_data` property is being called
> unnecessarily before checking whether it is an add behavior. I propose
> call the `changed_data = form.changed_data` after check if is add.
New description:
This is the currently code of the method `construct_change_message` of
`django.contrib.admin.utils`
{{{
#!python
def construct_change_message(form, formsets, add):
"""
Construct a JSON structure describing changes from a changed object.
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":
changed_field_labels}})
}}}
If you notice that the `form.changed_data` property is being called
unnecessarily before checking whether it is an add behavior. I propose
call the `changed_data = form.changed_data` after check if is add.
If I am accepted, I would like to create the PR myself.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/36801#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/0107019b22a1640a-4f742801-e154-4043-829d-ec0ded2db564-000000%40eu-central-1.amazonses.com.