【问题标题】:Django pagination: redirect to specific page after edit (FBV)Django分页:编辑后重定向到特定页面(FBV)
【发布时间】:2020-11-24 06:37:23
【问题描述】:

我在 Django 中使用分页列出了 300 条客户记录。每页包含 20 条记录。假设我在第 7 页并选择了要编辑的记录。编辑记录后,成功的 url 重定向列表视图(这是第一页)。所以我想,如果我在?page=7 中编辑,当客户id 完成编辑时,它会回到?page=7。

这里是我在view.py 中的customer_list 视图:

def customer_list(request):
    posts_list = Customer.objects.all()
    query = request.GET.get('q')
    if query:
        posts_list = Customer.objects.filter(
            Q(invoice__addresses__contact_number__icontains=query) |
            Q(invoice__addresses__address__icontains=query) |
            Q(shipping_method__icontains=query) 
        ).distinct()
    page = request.GET.get('page')
    paginator = Paginator(posts_list, 20)  # 20 posts per page
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

    context = {
        'posts': posts,
        'page': page
    }
    return render(request, "customers/customer_list.html", context)

这里是update_customer_list在view.py中查看:

def update_customer_list(request, id):
    """
       Here, update single customer id form customer table
       :param request:
       :param id:
       :return:
       """
    obj = get_object_or_404(Customer, pk=id)
    form = CustomerForm(request.POST or None, instance=obj)
    if form.is_valid():
        form.save()
        messages.add_message(request, messages.SUCCESS, 'Customer successfully Updated')
        return redirect('customer_list')
    return render(request, 'customers/customerUpdateForm.html', {'form': form})

这里是update_customer_listurls.py中的网址:

path('update_customer_list/<int:id>/', views.update_customer_list, name='update_customer_list'),

我正在等待某人的帮助,我们将不胜感激...

【问题讨论】:

  • 将页面参数传递给编辑视图,然后使用页面参数的查询参数重定向到页面列表
  • @DimitrisKougioumtzis 谢谢你的回复..我明白你的意思..你能举个例子来说明如何实现它..??实际上,我首先想到了(根据您的回答),但对实现感到困惑..

标签: django django-views


【解决方案1】:

您将页面参数传递给您拥有的 url 和内部函数:

from django.shortcuts import reverse_lazy
def update_customer_list(request, id):
"""
   Here, update single customer id form customer table
   :param request:
   :param id:
   :return:
   """
page = request.GET.get("page") 
obj = get_object_or_404(Customer, pk=id)
form = CustomerForm(request.POST or None, instance=obj)
if form.is_valid():
    form.save()
    messages.add_message(request, messages.SUCCESS, 'Customer successfully Updated')
    url = reverse_lazy("customer_list") + "?page=" + page
    return redirect(url)
return render(request, 'customers/customerUpdateForm.html', {'form': form})

【讨论】:

  • 我试过 .. 但page = request.GET.get("page") 给了None .. 你能说出原因吗??
  • 您必须将页面参数传递给编辑视图的链接作为请求获取参数
  • 我在浏览器中的编辑页面网址是:http://localhost:8000/update_customer_list/18/
  • 还是想不通:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2011-04-27
  • 2023-04-08
  • 2014-04-01
相关资源
最近更新 更多