重定向到 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)
您可以重定向到 Order
的 customer_profile
。如果从 Order
到 Customer
的 ForeignKey
被命名为 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.
这个功能是更新订单,我想被重定向到客户资料页面,在那里我可以找到这个客户的所有订单。在客户资料中,我列出了所有订单,并带有修改或删除选项。我想修改并重定向到客户资料页面,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)
您可以重定向到 Order
的 customer_profile
。如果从 Order
到 Customer
的 ForeignKey
被命名为 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, theget_object_or_404(…)
will result in returning a HTTP 404 Not Found response, whereas using.get(…)
will result in a HTTP 500 Server Error.