Я пытаюсь сохранить 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 добираются, назвал по-видимому предположение, что это - допустимая форма.
Я мог бы пропускать что-то здесь, но я не вижу что случилось. То, что я хочу произойти, точно так же, как любая другая форма, если поле требуется выложить ошибку если не заполненный. Какие-либо идеи?
Хех, у меня была точно такая же проблема. Проблема в том, что вы используете набор форм!!! Формсеты позволяют всем полям в форме быть пустыми. Однако, если у вас 2 поля, а заполнено только одно, то он распознает ваши обязательные элементы. Это происходит потому, что наборы форм созданы для "массового добавления", и иногда вы не хотите заполнять все дополнительные формы на странице. Это очень раздражает; вы можете посмотреть мое решение здесь.
используйте:
если нет (formset.errors): ...
вместо:
, если formset.is_valid (): ...