def order_add(request):
if request.method == 'POST':
order_form = OrderForm(request.POST)
order_item_formset = OrderItemFormSet(request.POST, instance=Order())
if order_form.is_valid() and order_item_formset.is_valid():
order = order_form.save()
order_item_formset.instance = order
order_item_formset.save()
return redirect("order/list/") # 假设有一个显示成功的页面
else:
order_form = OrderForm()
order_item_formset = OrderItemFormSet(instance=Order())
return render(request, 'order_add.html', {
'order_form': order_form,
'order_item_formset': order_item_formset,
})
为了修复重定向到/order/list/
而不是/order/add/order/list/
的问题,您需要确保在redirect
函数中传递的是一个URL的名称,而不是一个URL路径的字符串。正如我前面提到的,您应该在urls.py
文件中为订单列表页面定义一个URL名称,并在redirect
函数中使用这个名称。
这里是修复后的order_add
视图代码示例:
from django.shortcuts import redirect, render
# ... 导入其他需要的模块 ...
def order_add(request):
if request.method == 'POST':
order_form = OrderForm(request.POST)
order_item_formset = OrderItemFormSet(request.POST, instance=Order())
if order_form.is_valid() and order_item_formset.is_valid():
order = order_form.save()
order_item_formset.instance = order
order_item_formset.save()
# 使用URL的名称来重定向到订单列表页面
return redirect('order_list') # 假设在urls.py中定义了名为'order_list'的URL
else:
order_form = OrderForm()
order_item_formset = OrderItemFormSet(instance=Order())
return render(request, 'order_add.html', {
'order_form': order_form,
'order_item_formset': order_item_formset,
})
接下来,确保在您的urls.py
文件中为订单列表页面定义了一个带有名称的URL模式,例如:
# urls.py
from django.urls import path
from .views import order_list, order_add
urlpatterns = [
# ... 其他URL模式 ...
path('order/add/', order_add, name='order_add'),
path('order/list/', order_list, name='order_list'), # 定义了名为'order_list'的URL
# ... 其他URL模式 ...
]
现在,当您的表单验证成功时,用户将被正确地重定向到/order/list/
URL,这是由名为order_list
的URL模式定义的。