首页 > 解决方案 > 在 django 上重定向到带有 pk 的页面

问题描述

这个功能是更新订单,我想被重定向到客户资料页面,在那里我可以找到所有该客户的订单。在客户资料上,我列出了所有带有修改或删除选项的订单。我想修改并重定向到 url 为的客户资料页面:

path("customer_profile/<int:pk>/", views.Customer_profile, name="customer_profile")

def OrderUpdate(request, pk):
order = Order.objects.get(id=pk)
form = OrderForm(instance=order)
if request.method == 'POST':
    form = OrderForm(request.POST, instance=order)
    if form.is_valid():
        form.save()
        return redirect('orders')

context = {'form':form}
return render(request, 'orders/order_form.html', context)

标签: djangodjango-viewsdjango-urls

解决方案


您可以重定向customer_profileOrder. 如果ForeignKeyfrom OrdertoCustomer被命名customer,您可以重定向到:

from django.shortcuts import get_object_or_404

def OrderUpdate(request, pk):
    order = get_object_or_404(Order, pk=pk)
    form = OrderForm(instance=order)
    if request.method == 'POST':
        form = OrderForm(request.POST, instance=order)
        if form.is_valid():
            form.save()
            return redirect('customer_profile', pk=order.customer_id)
    context = {'form':form}
    return render(request, 'orders/order_form.html', context)

注意:通常最好使用get_object_or_404(…)[Django-doc],然后直接使用.get(…)[Django-doc]。如果对象不存在,例如因为用户自己更改了 URL,get_object_or_404(…)将导致返回HTTP 404 Not Found响应,而 using .get(…)将导致HTTP 500 Server Error


推荐阅读