重定向到 django 上带有 pk 的页面

redirect to a page with pk on django

这个功能是更新订单,我想被重定向到客户资料页面,在那里我可以找到这个客户的所有订单。在客户资料中,我列出了所有订单,并带有修改或删除选项。我想修改并重定向到客户资料页面,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)

您可以重定向到 Ordercustomer_profile。如果从 OrderCustomerForeignKey 被命名为 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(<b>'customer_profile', pk=order.customer_id</b>)
    context = {'form':form}
    return render(request, 'orders/order_form.html', context)

Note: It is often better to use get_object_or_404(…) [Django-doc], then to use .get(…) [Django-doc] directly. In case the object does not exists, for example because the user altered the URL themselves, the get_object_or_404(…) will result in returning a HTTP 404 Not Found response, whereas using .get(…) will result in a HTTP 500 Server Error.