Ensure search promotions formset does not get reset if the query form is invalid

pull/11950/merge
Sage Abdullah 2024-11-22 14:50:16 +00:00 zatwierdzone przez Matt Westcott
rodzic 93382d3f21
commit e9ffe38943
2 zmienionych plików z 27 dodań i 31 usunięć

Wyświetl plik

@ -599,26 +599,25 @@ class TestSearchPromotionsAddView(WagtailTestUtils, TestCase):
# User should be given an error on the specific field in the form
self.assertEqual(response.status_code, 200)
# This currently fails because of a bug in the formset handling
# self.assertFormError(
# response.context["form"], "query_string", "This field is required."
# )
# # The formset should still contain the submitted data
# self.assertEqual(len(response.context["searchpicks_formset"].forms), 1)
# self.assertEqual(
# response.context["searchpicks_formset"].forms[0].cleaned_data["page"].id,
# 1,
# )
# self.assertEqual(
# response.context["searchpicks_formset"]
# .forms[0]
# .cleaned_data["description"],
# "Hello",
# )
# # Should not raise an error anywhere else
# self.assertFormSetError(response.context["searchpicks_formset"], 0, "page", [])
# self.assertFormSetError(response.context["searchpicks_formset"], 0, None, [])
# self.assertFormSetError(response.context["searchpicks_formset"], None, None, [])
self.assertFormError(
response.context["form"], "query_string", "This field is required."
)
# The formset should still contain the submitted data
self.assertEqual(len(response.context["searchpicks_formset"].forms), 1)
self.assertEqual(
response.context["searchpicks_formset"].forms[0].cleaned_data["page"].id,
1,
)
self.assertEqual(
response.context["searchpicks_formset"]
.forms[0]
.cleaned_data["description"],
"Hello",
)
# Should not raise an error anywhere else
self.assertFormSetError(response.context["searchpicks_formset"], 0, "page", [])
self.assertFormSetError(response.context["searchpicks_formset"], 0, None, [])
self.assertFormSetError(response.context["searchpicks_formset"], None, None, [])
def test_post_with_invalid_page(self):
# Submit

Wyświetl plik

@ -5,6 +5,7 @@ from django.http import Http404
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy
@ -146,10 +147,6 @@ class CreateView(generic.CreateView):
def form_valid(self, form):
self.form = form
self.object = Query.get(form.cleaned_data["query_string"])
# Save search picks
self.searchpicks_formset = forms.SearchPromotionsFormSet(
self.request.POST, instance=self.object
)
if save_searchpicks(self.object, self.object, self.searchpicks_formset):
messages.success(
@ -161,13 +158,13 @@ class CreateView(generic.CreateView):
return super().form_invalid(form)
def form_invalid(self, form):
self.searchpicks_formset = forms.SearchPromotionsFormSet()
return super().form_invalid(form)
def get(self, request, *args, **kwargs):
self.searchpicks_formset = forms.SearchPromotionsFormSet()
return super().get(request, *args, **kwargs)
@cached_property
def searchpicks_formset(self):
if self.request.method == "POST":
return forms.SearchPromotionsFormSet(
self.request.POST, instance=self.object
)
return forms.SearchPromotionsFormSet()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)