模型表单集 - 默认情况下,模型表单集呈现一个额外的字段(总共 2 个字段)
Posted
技术标签:
【中文标题】模型表单集 - 默认情况下,模型表单集呈现一个额外的字段(总共 2 个字段)【英文标题】:Model Formset - By Default model formset is rendering one extra field (2 fields in total) 【发布时间】:2015-10-24 18:43:15 【问题描述】:我的模型表单集甚至没有在 modelformset_factory 中定义“额外”参数,正在渲染模板中的一个额外字段。我尝试了很多变化,但没有奏效。如果我在命令行上打印表单(模型表单),它只会根据需要打印一个表单字段,但在模型表单集上它默认打印 2。
这是我的代码。
models.py
class Direction(models.Model):
text = models.TextField(blank=True, verbose_name='Direction|text')
forms.py
class DirectionForm(forms.ModelForm):
class Meta:
model = Direction
fields = ['text',]
views.py
def myview(request):
Dirset = modelformset_factory(Direction, form=DirectionForm)
if request.method == "POST":
dir_formset = Dirset(request.POST or None)
if dir_formset.is_valid():
for direction in dir_formset:
text = direction.cleaned_data.get('text')
Direction.objects.create(text=text)
return render(request, "test/test.html", 'DirFormSet':Dirset)
模板
% block content %
<form method="POST">% csrf_token %
<div id="forms">
DirFormSet.management_form
% for form in DirFormSet %
form.text
% if error in form.text.errors %
error|escape
% endif %
% endfor %
</div>
<button id="add-another">add another</button>
<input type="submit" />
</form>
% endblock %
附带说明,如果我在此表单上提交数据,则会出现以下错误。 错误
Exception Type: MultiValueDictKeyError
Exception Value:"u'form-0-id'"
【问题讨论】:
【参考方案1】:默认情况下,modelformset_factory
会创建一个额外的表单。如果您不想要任何额外的表格,请设置extra=0
。
Dirset = modelformset_factory(Direction, form=DirectionForm, extra=0)
KeyError
是因为您没有在模板中包含表单的 id
字段。你应该有类似的东西:
% for form in dir_formset %
form.id
form.text
...
% endfor %
请注意,您应该在渲染模板时传递表单集实例dir_formset
,而不是类DirFormSet
。你的视图应该是这样的
return render(request, "test/test.html", 'dir_formset': dir_formset)
那么模板应该更新为使用dir_formset
而不是DirFormSet
。
【讨论】:
我之前尝试过 extra=0 并且效果很好,但在文档中没有找到。你能给我参考一下文档吗? docs.djangoproject.com/en/1.8/topics/forms/modelforms/… 我在上面链接到的modelformset_factory
文档显示额外的默认值为一个。另请参阅常规 formsets 的文档。
Here is a similar question 我遇到了麻烦(未来的读者可能会觉得有用)以上是关于模型表单集 - 默认情况下,模型表单集呈现一个额外的字段(总共 2 个字段)的主要内容,如果未能解决你的问题,请参考以下文章