Opened 99 minutes ago

Last modified 98 minutes ago

#36801 assigned Cleanup/optimization

`construct_change_message`call `form.changed_data` after check if is add

Reported by: Rodolfo Becerra Owned by: Rodolfo Becerra
Component: contrib.admin Version:
Severity: Normal Keywords: construct_change_message
Cc: Rodolfo Becerra Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no

Description (last modified by Rodolfo Becerra)

This is the currently code of the method construct_change_message of django.contrib.admin.utils

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.

Change History (1)

comment:1 by Rodolfo Becerra, 98 minutes ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top