我正在尝试保存一个formset,但它似乎绕过了is_valid(),即使有必需的字段。
为了测试这个,我有一个简单的表格:
class AlbumForm(forms.Form):
name = forms.CharField(required=True)
观点:
@login_required
def add_album(request, artist):
artist = Artist.objects.get(slug__iexact=artist)
AlbumFormSet = formset_factory(AlbumForm)
if request.method == 'POST':
formset = AlbumFormSet(request.POST, request.FILES)
if formset.is_valid():
return HttpResponse('worked')
else:
formset = AlbumFormSet()
return render_to_response('submissions/addalbum.html', {
'artist': artist,
'formset': formset,
}, context_instance=RequestContext(request))
模板:
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
{{ formset.management_form }}
{% for form in formset.forms %}
<ul class="addalbumlist">
{% for field in form %}
<li>
{{ field.label_tag }}
{{ field }}
{{ field.errors }}
</li>
{% endfor %}
</ul>
{% endfor %}
<div class="inpwrap">
<input type="button" value="add another">
<input type="submit" value="add">
</div>
</form>
最终发生的事情是我点击“添加”而不输入名称然后HttpResponse('working')被称为看似假设它是一个有效的形式。
我可能会在这里遗漏一些东西,但我看不出有什么问题。我想要发生的是,就像任何其他形式一样,如果字段需要在未填写时吐出错误。任何想法?
答案 0 :(得分:11)
答案 1 :(得分:1)
对于所需的每个字段,请在attrs参数中添加一个额外的条目
resident_status = forms.ChoiceField(widget=forms.Select(
attrs={'class': 'form-control', 'required': 'required'}), choices=President.RESIDENT_STATUS,
required=True)
正如您所看到的,我为django的表单验证保留了required = True,但指定了&#39; required&#39;:&#39; required&#39;要求模板坚持该领域。
希望有所帮助。
答案 2 :(得分:0)
添加2行。
if request.method == 'POST':
def initial_form_count(self): return 10 # the number of forms
AlbumFormSet.initial_form_count = initial_form_count
formset = AlbumFormSet(request.POST, request.FILES)
祝你好运!
答案 3 :(得分:-4)
使用:
如果不是(formset.errors):...
而不是:
如果formset.is_valid():...