From fb3cb229e95e2e2f53b023303a4ac982753db464 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sun, 16 Apr 2023 17:58:03 +1000 Subject: [PATCH] Fixes #2571 Persist book.subjects and add_author when form validation fails. This does not resolve the problem of cover image uploads being dropped because this is a broader problem and is covered separately in #2760 (we should investigate the plugin ` django-file-resubmit`) --- bookwyrm/views/books/edit_book.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bookwyrm/views/books/edit_book.py b/bookwyrm/views/books/edit_book.py index 97b012db8..829b7a6c0 100644 --- a/bookwyrm/views/books/edit_book.py +++ b/bookwyrm/views/books/edit_book.py @@ -102,11 +102,13 @@ class CreateBook(View): "authors": authors, } - ensure_transient_values_persist(request, data) - if not form.is_valid(): + ensure_transient_values_persist(request, data, form) return TemplateResponse(request, "book/edit/edit_book.html", data) + # we have to call this twice because it requires form.cleaned_data + # which only exists after we validate the form + ensure_transient_values_persist(request, data, form) data = add_authors(request, data) # check if this is an edition of an existing work @@ -139,8 +141,11 @@ class CreateBook(View): return redirect(f"/book/{book.id}") -def ensure_transient_values_persist(request, data): +def ensure_transient_values_persist(request, data, form): """ensure that values of transient form fields persist when re-rendering the form""" + data["book"] = data.get("book") or {} + data["book"]["subjects"] = form.cleaned_data["subjects"] + data["add_author"] = request.POST.getlist("add_author") data["cover_url"] = request.POST.get("cover-url")