[有很多类似的问题。但是我的问题略有不同。
在一个视图中,我正在使用多种形式,为此,我正在使用formset和普通形式。这是我的视图:
class CreateInvoice(TemplateView):
template_name = 'product/create_invoice.html'
product_list = Product.objects.get_all_product()
ItemFormSet = formset_factory(ItemForm, formset=BaseItemFormSet, extra=0)
def get_context_data(self, **kwargs):
if 'items' not in kwargs:
kwargs['items'] = self.ItemFormSet()
if 'order' not in kwargs:
kwargs['order'] = OrderForm()
kwargs['product_list'] = self.product_list
return super().get_context_data(**kwargs)
def post(self, request):
item_formset = self.ItemFormSet(request.POST)
order_form = OrderForm(request.POST)
if order_form.is_valid() and item_formset.is_valid():
order = order_form.cleaned_data
items = item_formset.cleaned_data
order['sold_by'] = request.user
order_id = Order.objects.crate_new_order(order=order, items=items)
return HttpResponseRedirect(self.render_to_response(self.get_context_data(pos_invoice=generate_pos_invoice(), order_id=order_id)))
else:
return HttpResponseRedirect(self.render_to_response(self.get_context_data(items=item_formset, order=order_form,)))
如果表格无效,那么我需要在同一页面上显示错误消息。如果表单有效,则还需要使用HTML收据字符串和其他数据来呈现同一页面。
但是这里的问题是,如果刷新浏览器(例如pres crtl + f5),那么将再次提交相同的表单。通过谷歌搜索,我知道这个问题是由于我使用渲染而不是重定向而创建的。这是我从哪里知道的问题的链接:Django form submit again on refresh
现在是主要问题,如果我要重定向页面,那么我将失去想要的功能。例如,如果表单无效,则无法发送错误消息;如果表单有效,则无法发送额外的数据,例如收据HTML页面字符串。
现在,我不知道如何解决此问题或提出更好的方法。预先感谢。