Friday, June 11, 2021

Form errors in ListFormsetView created by adding methods to a ListView.

Hello, 

I am consistently getting this bizarre error and formset_invalid is getting triggered.
I just tried to make a generic ListFormSetView.

[11/Jun/2021 12:48:24] "GET /adminuser/print-report/?page=1 HTTP/1.1" 200 5244
[{'PAN_ID': ['User with this Pan ID already exists.']}]
[11/Jun/2021 12:59:29] "POST /adminuser/print-report/?page=2 HTTP/1.1" 200 5250

In my model the USERNAME_FIELD  is PAN_ID.

Webpage looks like this

https://ibb.co/CHT4nKB

Code:

class PrintStatementView(ListFormSetView):
    paginate_by = 1
    model = User
    form_class = PrintReportModelForm
    template_name = "adminuser/printstatement.html"
    context_formset_name = "formset"
    ordering = ("PAN_ID",)

    def get_factory_object(self):
        return modelformset_factory(
            self.model,
            form=self.form_class,
            extra=0,
        )

    def formset_valid(selfformset):
        self.request.session.setdefault("to_download", [])
        self.request.session["to_download"][self.kwargs["page"]] = [
            x["PAN_ID"]
            for x in formset.cleaned_data
            if x["print_report_check"]
        ]
        return HttpResponseRedirect(
            f"{reverse('print-report')}?page={self.kwargs['page']}"
        )

    def get_success_url(self):
        return reverse("adminuser:trading-window-list")





class ListFormSetView(ListView):
    def get_factory_object(self):
        return NotImplementedError(" Implement yourself ")

    def get_context_data(self, *, object_list=None, **kwargs):

        context_formset_name = (
            getattr(self"context_formset_name"Noneor "formset"
        )

        context_data = super().get_context_data(**kwargs)

        object_list = context_data["object_list"]
        context_data[context_formset_name] = self.get_factory_object()(
            queryset=object_list, initial=self.get_initial(object_list)
        )

        return context_data

    def get_form_kwargs(self):

        context_data = super().get_context_data()

        object_list = context_data["object_list"]

        kwargs = {
            "initial"self.get_initial(object_list),
            "queryset": object_list,
        }
        if self.request.method in ("POST""PUT"):
            kwargs.update(
                {
                    "data"self.request.POST,
                    "files"self.request.FILES,
                }
            )
        return kwargs

    def get_initial(selfqueryset=[]):
        """ Generate the initial data for the paginated queryset for the current page"""
        try:
            return self.initial
        except AttributeError:
            data = serializers.serialize("json", queryset)
            data = json.loads(data)
            return data

    def post(selfrequest, *args, **kwargs):
        self.object_list = self.get_queryset()
        formset = self.get_factory_object()(**self.get_form_kwargs())

        if formset.is_valid():
            return self.formset_valid(formset)
        else:
            return self.formset_invalid(formset)

    def formset_valid(selfformset):
        return HttpResponseRedirect(self.get_success_url())

    def formset_invalid(selfformset):
        print(formset.errors)
        return self.render_to_response(self.get_context_data(formset=formset))



--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3e032b7e-2999-4d62-a1d9-e8365e7a037dn%40googlegroups.com.

No comments:

Post a Comment