From c79109da39eb78041a3b7765dcefa607d5c03aaa Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Wed, 2 Aug 2023 11:35:37 +0200 Subject: Support deleting keys in json_form_fields If the attribute delete_on_empty is set to True on the Field, and the value submitted from the user is empty, delete the key from the json object instead of setting it to the empty string. The default behaviour remains the previous one, which is set the key explicitly to the empty string. --- postgresqleu/util/backendviews.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'postgresqleu/util') diff --git a/postgresqleu/util/backendviews.py b/postgresqleu/util/backendviews.py index e1eb614b..685320d9 100644 --- a/postgresqleu/util/backendviews.py +++ b/postgresqleu/util/backendviews.py @@ -181,7 +181,13 @@ def backend_process_form(request, urlname, formclass, id, cancel_url='../', save if form.json_form_fields: for fn, ffields in form.json_form_fields.items(): d = getattr(form.instance, fn, {}) - d.update({fld: form.cleaned_data[fld] for fld in ffields}) + for fld in ffields: + if form.cleaned_data[fld] or not getattr(form.fields[fld], 'delete_on_empty', False): + # If we have a value, or if we're asked to store empty strings, + # then do so. + d[fld] = form.cleaned_data[fld] + elif form.cleaned_data[fld] == '' and getattr(form.fields[fld], 'delete_on_empty', False): + del d[fld] setattr(form.instance, fn, d) form.instance.save(update_fields=form.json_form_fields.keys()) -- cgit v1.2.3