Return to paginated ListView page after update

53 views
Skip to first unread message

James Y

unread,
Sep 12, 2014, 6:23:52 PM9/12/14
to django...@googlegroups.com
It must be more simple than the nothingness that searching google is showing me... how can I to get back to the last page (say page 2: http://127.0.0.1:8000/articlelist/2, which works) in a ListView after an UpdateView.  

I can go to a random page - 10 in the below UpdateView - but how do I capture the referring ListView's current page and then feed that back in get_success_url after the update?  

class ArticleEditView(UpdateView):
    model = Article
    template_name = 'edit_template.html'
    form_class = ArticleForm

    def get_success_url(self):
        return reverse('editor_listview', kwargs={'page': 10})


Thank you

James Y

unread,
Sep 15, 2014, 4:55:43 PM9/15/14
to django...@googlegroups.com
There's probably better solution, but this works: 
1) added a page_number to the view
2) subclass dispatch and in get page from request:         self.page_number = request.REQUEST['page']
3) subclass get_context_data and put the page number in a hidden files on the form:         context['hidden_field'] = self.page_number #20 
    in the form: 
{% for hidden_field in form.hidden_fields %}
    {{ hidden_field }}
{% endfor %}
4) subclass form_valid and set the page_number: self.page_number = context['hidden_field']
5) and finally: 
get_success_url(self, **kwargs):
        return reverse('articleeditor_list', kwargs={'page': self.page_number})


class ArticleEditView(UpdateView):
    model = Article
    template_name = 'edit_template.html'
    page_number = 1

    def dispatch(self, request, *args, **kwargs):
        self.page_number = request.REQUEST['page']
        return super(ArticleEditView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(ArticleEditView, self).get_context_data(**kwargs)
        context['hidden_field'] = self.page_number 
        return context

    def form_valid(self, form, **kwargs):
        context = self.get_context_data(**kwargs)
        self.page_number = context['hidden_field']
        return super(ArticleEditView, self).form_valid(form)

    def get_success_url(self, **kwargs):
        return reverse('editor_listview', kwargs={'page': self.page_number})
Reply all
Reply to author
Forward
0 new messages