перенаправить на страницу с pk на django - PullRequest
1 голос
/ 06 августа 2020

Эта функция предназначена для обновления заказа, я хочу, чтобы меня перенаправили на страницу профиля клиента, где я могу найти все заказы этого клиента. в профиле клиента у меня есть все заказы, которые можно изменить или удалить. Я хотел бы изменить и перенаправить на страницу профиля клиента, 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)

1 Ответ

1 голос
/ 06 августа 2020

Вы можете перенаправить на customer_profile из Order. Если ForeignKey от Order до Customer называется 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)

Примечание : часто лучше использовать get_object_or_404(…) [Django -doc] , а затем использовать .get(…) [Django -doc] напрямую. В случае, если объект не существует, например, потому что пользователь сам изменил URL-адрес, get_object_or_404(…) приведет к возврату ответа HTTP 404 Not Found , тогда как использование .get(…) приведет к Ошибка сервера HTTP 500 .

...