Sunday, June 13, 2021

Re: Initial data doesn't go complelely in the modelformset

In line 58  you can see me adding  "print_report_check":True,  


my form

class PrintReportModelForm(ModelForm):
    print_report_check = forms.BooleanField(widget=forms.CheckboxInput(), required=False)
    class Meta:
        fields = ["PAN_ID""print_report_check"]
        model = User
        widgets = {"PAN_ID"forms.HiddenInput()}
    
    def __init__(self,*args, **kwargs): 
        super().__init__(*args, **kwargs)   
        self.fields["PAN_ID"].disabled = True
     #   self.fields["print_report_check"].initial = True

    def save(selfcommit=True):
        logger.info(" Method not meant to save anything ")
        pass

On Monday, June 14, 2021 at 12:09:49 AM UTC+5:30 VISHESH MANGLA wrote:
in line 38 i have that print statement, it's output is at the top , I dont know why that initial data is not going into that model formset.
actually one data the PAN_ID actually went into the modelform, but the checkbox's "checked" didnt. You can see the html of the formset and the checkbox field doesnt has a checked.


Code in paste 

GET
 <input type="hidden" name="form-TOTAL_FORMS" value="1" id="id_form-TOTAL_FORMS"><input type="hidden" name="form-INITIAL_FORMS" value="1" id="id_form-INITIAL_FORMS"><input type="hidden" name="form-MIN_NUM_FORMS" value="0" id="id_form-MIN_NUM_FORMS"><input type="hidden" name="form-MAX_NUM_FORMS" value="1000" id="id_form-MAX_NUM_FORMS">
<tr><th><label for="id_form-0-print_report_check">Print report check:</label></th><td><input type="checkbox" name="form-0-print_report_check" id="id_form-0-print_report_check"><input type="hidden" name="form-0-PAN_ID" value="10012000" disabled id="id_form-0-PAN_ID"></td></tr>
 [{'PAN_ID': '10012000', 'print_report_check': True}]






class ListFormSetView(ListView):
    context_formset_name = "formset"


    def get_factory_object(self):

        return modelformset_factory(
            self.model,
            form=self.form_class,
            extra=0,
        )
        
    def get_context_data(self, *, object_list=None, **kwargs):

        context_formset_name = getattr(
            self, "context_formset_name")

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

        object_list = context_data["object_list"]

        initial_data = self.get_initial(object_list)
        context_data[context_formset_name] = self.get_factory_object()(
            queryset=object_list, initial=initial_data
        )
        
        print(self.request.method , "\n", context_data[context_formset_name], "\n" ,initial_data )

        return context_data

    def get_initial(self, queryset=None):
        """Generate the initial data for the paginated queryset for the current page"""

        if queryset is None:
            queryset = []

        try:
            return self.initial
        except AttributeError:

            data = [
                {**{
                    field_name: getattr(item, field_name)
                    for field_name in self.form_class._meta.fields
                    if hasattr(item, field_name)
                }, "print_report_check":True}
                for item in queryset
            ]

            if self.request.method == "GET":
                try:
                    userids_for_checked_boxes = PrintStatementData["to_download"][
                        PrintStatementData["list-formset-view_previous-page"]
                    ]
                except KeyError:
                    pass
                else:
                    for i in data:
                        if i["PAN_ID"] in userids_for_checked_boxes:
                            i["print_report_check"] = True

            return data

    def get_formset_for_previous_page(self):
        """Set the `page_kwarg` 's  value to the previous page's value because
        the formset's data needs to be compared to the previous page's data.
        The `paginate_queryset` method uses self.kwargs["page_kwarg"]
        to get the queryset corresponding to a page.So just to get the
        initial data corresponding to the previous page through `self.get_form_kwargs` we first need to do this."""

        PrintStatementData[
            "list-formset-view_current-page"] = int(self.request.GET.get(
                self.page_kwarg))

        self.kwargs[self.page_kwarg] = PrintStatementData.get(
            "list-formset-view_previous-page")

        formset = self.get_factory_object()(**self.get_form_kwargs())

        self.kwargs[self.page_kwarg] = PrintStatementData.get(
            "list-formset-view_current-page")

        return 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/5e95b909-3b25-4e28-a9aa-292dc09c2d59n%40googlegroups.com.

No comments:

Post a Comment