刷新浏览器以获取多种表单时,Django提交表单

问题描述 投票:0回答:1

[有很多类似的问题。但是我的问题略有不同。

在一个视图中,我正在使用多种形式,为此,我正在使用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页面字符串。

现在,我不知道如何解决此问题或提出更好的方法。预先感谢。

javascript html django python-3.x django-views
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.