2017-01-27 3 views
2

В моем проекте у меня есть страница order detail. Эта страница имеет несколько форм (возврат заказа, доставка заказа и т. Д.)Как перенаправить в Django с ошибками формы?

Каждая из этих форм обрабатывается с использованием разных видов.

Например, для возврата формы заказа есть действие, которое вызывает order_return вид, который затем, если ReturnOrderForm действителен, перенаправляет обратно на order_detail.

Проблема в том, что есть ошибки в ReturnOrderForm. Я хотел бы вернуться к order_detail и показать ошибки.

На данный момент, я просто вынести order_detail внутри order_return зрения в случае ошибки, которая работает хорошо, но URL-адрес не меняется на order_detail URL. Я бы использовал HttpResponseRedirect, но я понятия не имею, как обрабатывать ошибки.

Есть ли у вас идеи?

def order_return(request): 
    return_order_form = ReturnOrderForm(request.POST or None) 
    order_id = request.POST.get('order_id') 
    order = Job.objects.get(id=order_id) 

    if request.method == 'POST': 
     if return_order_form.is_valid(): 
      ... 
      order.delivery.return_delivery(notes=customer_notes) 
      return HttpResponseRedirect(reverse("order_detail", args=(order_id,))) 

    return render(request, "ordersapp/order_detail/order-detail.html", 
        context={'return_order_form': return_order_form, 
          ...}) 

ответ

1

Вы можете сделать общий метод, который может вернуть ответ деталь

def get_order_detail_response(request, contxt=None, **kwargs) 
    context = contxt or {} 
    context['return_order_form'] = kwargs.get('return_form', ReturnOrderForm()) 
    return render(request, 'template', context) 

Каждый вид будет иметь возможность вернуть этот

return get_order_detail_response(request, return_form=return_order_form) 
+0

Также обратите внимание: если заявление проверки запроса метод не требуется в вашем коде, поскольку 'is_valid' никогда не будет успешным без действительных данных сообщения – Sayse

Смежные вопросы