inlineformset - 递增 TOTAL_FORMS 给出 MultiValueDictKeyError
inlineformset - incrementing TOTAL_FORMS gives MultiValueDictKeyError
我正在尝试在没有 javascript 支持的情况下实现动态表单集。
为此,我在表单底部添加了一个按钮,
<input type="submit" name="add_item" value="+" id="submit-id-add_item">
现在,在我的 CreateView 中,我尝试了以下代码。
def get_context_data(self, **kwargs):
context = super(AddInvoice, self).get_context_data(**kwargs)
ItemInlineFormSet = inlineformset_factory(Invoice, InvoiceItem, form=InvoiceItemForm, extra=1, can_delete=False, formset=InvoiceItemFormSet)
if self.request.method=='POST':
if 'add_item' in self.request.POST:
cp = self.request.POST.copy()
cp['item-TOTAL_FORMS'] = int(cp['item-TOTAL_FORMS'])+ 1
context['item_formset'] = ItemInlineFormSet(cp,prefix='item')
else:
context['item_formset'] = ItemInlineFormSet(self.request.POST,prefix='item')
else:
context['item_formset'] = ItemInlineFormSet (prefix='item')
return context
但是,当我点击 add_item 按钮时,出现以下错误
MultiValueDictKeyError at ... 'item-1-item'
(我的 form prefix
是 item
并且还有一个名为 item 的字段)
我怀疑这是因为 django 寻找 下一组表单元素 以匹配 TOTAL_FORMS 但它可以到处都找不到。
我在这里缺少什么?
谢谢。
我最初在 extra
附近尝试过一些没有用的东西——也许我忽略了什么。这是工作代码。
ItemInlineFormSet = inlineformset_factory(Invoice, InvoiceItem,
form=InvoiceItemForm,
extra=extra, can_delete=False,
formset=InvoiceItemFormSet)
if self.request.method=='POST':
if 'add_item' in self.request.POST:
extra= int(self.request.POST.get('item-TOTAL_FORMS'))+ 1
ItemInlineFormSet = inlineformset_factory(Invoice, InvoiceItem, form=InvoiceItemForm, extra=extra, can_delete=False,
formset=InvoiceItemFormSet)
context['item_formset'] = ItemInlineFormSet(prefix='item')
else:
context['item_formset'] = ItemInlineFormSet(self.request.POST,prefix='item')
else:
context['item_formset'] = ItemInlineFormSet (prefix='item')
return context
我正在尝试在没有 javascript 支持的情况下实现动态表单集。
为此,我在表单底部添加了一个按钮,
<input type="submit" name="add_item" value="+" id="submit-id-add_item">
现在,在我的 CreateView 中,我尝试了以下代码。
def get_context_data(self, **kwargs):
context = super(AddInvoice, self).get_context_data(**kwargs)
ItemInlineFormSet = inlineformset_factory(Invoice, InvoiceItem, form=InvoiceItemForm, extra=1, can_delete=False, formset=InvoiceItemFormSet)
if self.request.method=='POST':
if 'add_item' in self.request.POST:
cp = self.request.POST.copy()
cp['item-TOTAL_FORMS'] = int(cp['item-TOTAL_FORMS'])+ 1
context['item_formset'] = ItemInlineFormSet(cp,prefix='item')
else:
context['item_formset'] = ItemInlineFormSet(self.request.POST,prefix='item')
else:
context['item_formset'] = ItemInlineFormSet (prefix='item')
return context
但是,当我点击 add_item 按钮时,出现以下错误
MultiValueDictKeyError at ... 'item-1-item'
(我的 form prefix
是 item
并且还有一个名为 item 的字段)
我怀疑这是因为 django 寻找 下一组表单元素 以匹配 TOTAL_FORMS 但它可以到处都找不到。
我在这里缺少什么?
谢谢。
我最初在 extra
附近尝试过一些没有用的东西——也许我忽略了什么。这是工作代码。
ItemInlineFormSet = inlineformset_factory(Invoice, InvoiceItem,
form=InvoiceItemForm,
extra=extra, can_delete=False,
formset=InvoiceItemFormSet)
if self.request.method=='POST':
if 'add_item' in self.request.POST:
extra= int(self.request.POST.get('item-TOTAL_FORMS'))+ 1
ItemInlineFormSet = inlineformset_factory(Invoice, InvoiceItem, form=InvoiceItemForm, extra=extra, can_delete=False,
formset=InvoiceItemFormSet)
context['item_formset'] = ItemInlineFormSet(prefix='item')
else:
context['item_formset'] = ItemInlineFormSet(self.request.POST,prefix='item')
else:
context['item_formset'] = ItemInlineFormSet (prefix='item')
return context