feat(ISSUE-8): fixing error caused by ManyToManyField on confirmation (#9)

* feat(ISSUE-8): ISSUE-8: ManyToManyField causes error on confirmations

* feat(ISSUE-8): Update some readme and remove print statements

Co-authored-by: Thu Trang Pham <thu@joinmodernhealth.com>
This commit is contained in:
Thu Trang Pham
2021-02-19 21:25:15 -08:00
committed by GitHub
parent af31f2f966
commit 375b3d0917
6 changed files with 47 additions and 23 deletions
+5 -19
View File
@@ -123,39 +123,25 @@ class AdminConfirmMixin:
)
form = ModelForm(request.POST, request.FILES, obj)
form_validated = form.is_valid()
if form_validated:
new_object = self.save_form(request, form, change=not add)
else:
new_object = form.instance
# End code from super()._changeform_view
changed_data = {}
if form_validated:
if form.is_valid():
if add:
for name in form.cleaned_data:
new_value = getattr(new_object, name)
for name, new_value in form.cleaned_data.items():
# Don't consider default values as changed for adding
default_value = model._meta.get_field(name).get_default()
if (
new_value is not None
and new_value != default_value
):
if new_value is not None and new_value != default_value:
# Show what the default value is
changed_data[name] = [str(default_value), new_value]
else:
# Parse the changed data - Note that using form.changed_data would not work because initial is not set
for name, field in form.fields.items():
for name, new_value in form.cleaned_data.items():
# Since the form considers initial as the value first shown in the form
# It could be incorrect when user hits save, and then hits "No, go back to edit"
obj.refresh_from_db()
initial_value = getattr(obj, name)
new_value = getattr(new_object, name)
if (
field.has_changed(initial_value, new_value)
and initial_value != new_value
):
if initial_value != new_value:
changed_data[name] = [initial_value, new_value]
changed_confirmation_fields = set(
@@ -165,7 +165,6 @@ class TestConfirmChangeAndAdd(TestCase):
# Form invalid should show errors on form
self.assertEqual(response.status_code, 200)
print(response.rendered_content)
self.assertIsNotNone(response.context_data.get("errors"))
self.assertEqual(
response.context_data["errors"][0],