Django:如何在提交表单后重定向到具有分页的ListView?

问题描述 投票:0回答:1

我正在使用Django bootstrap模式形式,当我从分页页面更新一些记录时,它会重定向到列表视图的第一页。我想将其重定向到所选/更新记录的分页页面。

My list view with update in the left corner and pop up modal form to update it

单击“保存”后,它将重定向到没有分页参数的记录列表,如何在成功URL中添加分页参数。请帮忙

我的views.py

def record_list(request):
    queryset_list = Record.objects.filter(recorded__lte=timezone.now()).order_by('-recorded')

    query = request.GET.get("q")

    if query:
        for term in query.split():
            queryset_list = Record.objects.filter(Q(persons__last_name__icontains=term) |
                                                  Q(persons__first_name__icontains=term) |
                                                  Q(persons__middle_name__icontains=term) |
                                                  Q(title__icontains=term)
                                                  )

    paginator = Paginator(queryset_list.order_by('-recorded'), 10)
    page_request_var = "page"
    page = request.GET.get('page', 1)

    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
        queryset = paginator.page(1)
    except EmptyPage:
        queryset = paginator.page(paginator.num_pages)

    context = {
        "record_list": queryset,
        "page_request_var": page_request_var,
        "title": "List",
    }

    return render(request, 'Bato_Cabugao/Record/record_list.html', context)

class RecordUpdateView(LoginRequiredMixin,generic.UpdateView):
    template_name = 'Bato_Cabugao/Record/record_update.html'
    model = Record
    form_class = RecordForm

models.朋友

class Record(models.Model):
    title = models.CharField(max_length=200)
    persons = models.ManyToManyField(Person)
    details = models.TextField()
    recorded = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('Bato_Cabugao:list_record')

record_list.html - 分页

 {% if record_list.has_other_pages %}
            <nav aria-label="Page navigation example">
                <ul class="pagination justify-content-end">
                    {% if record_list.has_previous %}
                        <li class="page-item"><a class="page-link" href="?{{ page_request_var }}={{ record_list.previous_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">&laquo;</a>
                        </li>
                    {% else %}
                        <li class="disabled page-item"><span class="page-link">&laquo;</span></li>
                    {% endif %}

                    {% if record_list.number|add:'-4' > 1 %}
                        <li class="page-item"><a class="page-link" href="?page={{ record_list.number|add:' -5' }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">&hellip;</a>
                        </li>
                    {% endif %}

                    {% for i in record_list.paginator.page_range %}
                        {% if record_list.number == i %}
                            <li class="page-item page-link"><span>{{ i }} <span
                                    class="sr-only">(current)</span></span></li>
                        {% elif i > record_list.number|add:'-5' and i < record_list.number|add:'5' %}
                            <li class="page-item"><a class="page-link" href="?{{ page_request_var }}={{ i }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">{{ i }}</a></li>
                        {% endif %}
                    {% endfor %}

                    {% if record_list.paginator.num_pages > record_list.number|add:'4' %}
                        <li class="page-item">
                            <a class="page-link" href="?page={{ record_list.number|add:'5' }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">&hellip;</a>
                        </li>
                    {% endif %}

                    {% if record_list.has_next %}
                        <li class="page-item">
                            <a class="page-link"
                               href="?{{ page_request_var }}={{ record_list.next_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">&raquo;
                            </a>
                        </li>
                    {% else %}
                        <li class="page-item disabled"><span class="page-link">&raquo;</span></li>
                    {% endif %}
                </ul>
            </nav>
        {% endif %}
django django-views django-urls
1个回答
0
投票

current page numberRecord数据一起发送到UpdateView。然后在View中定义get_success_url方法,如下所示。

class RecordUpdateView(LoginRequiredMixin,generic.UpdateView):
    ...

    def get_success_url(self):
        current_page = self.request.POST.get('current_page')

        return <url_to_record_list> + '?page=' + current_page

假设您在request.GETrequest.POST中拥有当前页码,则可以构造并返回所需的最终URL。

© www.soinside.com 2019 - 2024. All rights reserved.