UpdateView django

0

Hi, I would like to know if I can paginate a Django UpdateView as I can do it. I have the following code but I do not know how I can paginate it.

class RoutingForAniGroupUpdate(UpdateView):

    model = RoutingForAniGroup
    template_name = 'forms.html'
    success_url = reverse_lazy('routing:ani')
    success_message = "%(name)s was created successfully"
    form_class = RoutingForAniGroupForm
    object = None

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        # Formset
        formset = modelformset_factory(RoutingForAni, form=RoutingForAniForm, can_delete=True, extra=4)

        # formset.form = staticmethod(curry(RoutingForAniForm, user=self.request.user))
        query = self.object.routingforani_set.filter().order_by("id")[0:1]

        print("\n*****************\n**************\n",query.count())

        eventdate_formset = formset(queryset=query)
        #print(eventdate_formset)
        print(self.get_context_data)

        return self.render_to_response(
            self.get_context_data(form=form, eventdate_formset=eventdate_formset)
        )

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        # Formset
        formset = modelformset_factory(RoutingForAni, form=RoutingForAniForm, can_delete=True, extra=4)
        # formset.form = staticmethod(curry(RoutingForAniForm, user=self.request.user))
        eventdate_formset = formset(
            self.request.POST,
            queryset=self.object.routingforani_set.all()
        )

        if form.is_valid() and eventdate_formset.is_valid():
            return self.form_valid(form, eventdate_formset)
        return self.form_invalid(form, eventdate_formset)

    def form_invalid(self, form, eventdate_formset):
        messages.error(self.request, "Invalid form data")
#        print(form, eventdate_formset)
        return self.render_to_response(
            self.get_context_data(form=form, eventdate_formset=eventdate_formset)
        )

    def form_valid(self, form, eventdate_formset):
        response = super(RoutingForAniGroupUpdate, self).form_valid(form)
        instances = eventdate_formset.save(commit=False)

        for obj in eventdate_formset.deleted_objects:
            obj.delete()

        for obj in instances:
            obj.group_id = self.object.pk
            obj.save()

        messages.success(self.request, "Update ")
        return response
    
asked by NEFEGAGO 08.06.2018 в 00:20
source

1 answer

0

what he did was:

  • change the form of the return from render_to_response to a render
  • what validates the formset method is a list type object that is sorted, so what was done was to page and then what was paged to convert it with a object_list
  • I attached the function get that was the one that I modified of the class

    def get(self, request, *args, **kwargs):
    
    self.object = self.get_object()
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    
    # Formset
    formset = modelformset_factory(RoutingForAni, form=RoutingForAniForm, can_delete=True, extra=4)
    # formset.form = staticmethod(curry(RoutingForAniForm, user=self.request.user))
    query = self.object.routingforani_set.filter().order_by('id')
    query = Paginator(query, 10)
    
    eventdate_formset = formset(queryset=query.page(1).object_list)
    
    return render(
        request,
        self.template_name,
        {   'form':form,
            'eventdate_formset':eventdate_formset,
            'objects':query
    
        }
    )
    
  • This is how I manage to solve the paging in my UpdateView being paged with a size of 10 Dies and located on page 1 One thanks to everyone for the contribution

        
    answered by 08.06.2018 / 20:30
    source