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.
(form, formsets, add)
| 560 | |
| 561 | |
| 562 | def construct_change_message(form, formsets, add): |
| 563 | """ |
| 564 | Construct a JSON structure describing changes from a changed object. |
| 565 | Translations are deactivated so that strings are stored untranslated. |
| 566 | Translation happens later on LogEntry access. |
| 567 | """ |
| 568 | change_message = [] |
| 569 | if add: |
| 570 | change_message.append({"added": {}}) |
| 571 | # Evaluating `form.changed_data` prior to disabling translations is |
| 572 | # required to avoid fields affected by localization from being included |
| 573 | # incorrectly, e.g. where date formats differ such as MM/DD/YYYY vs |
| 574 | # DD/MM/YYYY. |
| 575 | elif changed_data := form.changed_data: |
| 576 | with translation_override(None): |
| 577 | # Deactivate translations while fetching verbose_name for form |
| 578 | # field labels and using `field_name`, if verbose_name is not |
| 579 | # provided. Translations will happen later on LogEntry access. |
| 580 | changed_field_labels = _get_changed_field_labels_from_form( |
| 581 | form, changed_data |
| 582 | ) |
| 583 | change_message.append({"changed": {"fields": changed_field_labels}}) |
| 584 | if formsets: |
| 585 | with translation_override(None): |
| 586 | for formset in formsets: |
| 587 | for added_object in formset.new_objects: |
| 588 | change_message.append( |
| 589 | { |
| 590 | "added": { |
| 591 | "name": str(added_object._meta.verbose_name), |
| 592 | "object": str(added_object), |
| 593 | } |
| 594 | } |
| 595 | ) |
| 596 | for changed_object, changed_fields in formset.changed_objects: |
| 597 | change_message.append( |
| 598 | { |
| 599 | "changed": { |
| 600 | "name": str(changed_object._meta.verbose_name), |
| 601 | "object": str(changed_object), |
| 602 | "fields": _get_changed_field_labels_from_form( |
| 603 | formset.forms[0], changed_fields |
| 604 | ), |
| 605 | } |
| 606 | } |
| 607 | ) |
| 608 | for deleted_object in formset.deleted_objects: |
| 609 | change_message.append( |
| 610 | { |
| 611 | "deleted": { |
| 612 | "name": str(deleted_object._meta.verbose_name), |
| 613 | "object": str(deleted_object), |
| 614 | } |
| 615 | } |
| 616 | ) |
| 617 | return change_message |
| 618 | |
| 619 |
no test coverage detected