我正在构建一个包含2个表单的TemplateView,一个用于允许用户选择客户(CustomerForm),另一个用于为客户添加订单(OrderForm)。
代码:
class DisplayOrdersView(TemplateView):
template_name = 'orders/orders_details_form.html'
def get_context_data(self, **kwargs):
context = kwargs
context['shippingdetailsform'] = ShippingDetailsForm(prefix='shippingdetailsform')
context['ordersform'] = OrdersForm(prefix='ordersform')
return context
def dispatch(self, request, *args, **kwargs):
return super(DisplayOrdersView, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
profile=request.user.get_profile()
if context['shippingdetailsform'].is_valid():
instance = context['shippingdetailsform'].save(commit=False)
instance.profile = profile
instance.save()
messages.success(request, 'orders for {0} saved'.format(profile))
elif context['ordersform'].is_valid():
instance = ordersform.save(commit=False)
shippingdetails, created = shippingdetails.objects.get_or_create(profile=profile)
shippingdetails.save()
instance.user = customer
instance.save()
messages.success(request, 'orders details for {0} saved.'.format(profile))
else:
messages.error(request, 'Error(s) saving form')
return self.render_to_response(context)
首先,我似乎无法将任何现有数据加载到表单中。假设UserProfile-> ShippingDetails(fk:UserProfile) - > Orders(fk:ShippingDetails)之间存在关联关系,如何在加载时将相应的变量查询到表单中?
另外,如何保存数据?保存时会抛出错误,但我无法检索有用的调试信息。
我的方法在模板视图中有多个表单是否正确?
答案 0 :(得分:2)
您不会在任何时候将POST数据传递到表单中。实例化它们时需要执行此操作。我会将实例化移出get_context_data
并在get
和post
中执行:第一个就像现在一样,第二个通过request.POST
。
另请注意,您可能希望在保存两个表单之前检查两个表单是否有效,而不是依次检查并保存每个表单。你现在的方式,如果第一个有效,它甚至不会检查第二个,更不用说保存它,所以如果第一个有效但第二个无效,你将不会在模板上得到任何错误。 / p>