Django formset не проверяет

Я пытаюсь сохранить 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 добираются, назвал по-видимому предположение, что это - допустимая форма.

Я мог бы пропускать что-то здесь, но я не вижу что случилось. То, что я хочу произойти, точно так же, как любая другая форма, если поле требуется выложить ошибку если не заполненный. Какие-либо идеи?

8
задан tsoporan 16 March 2010 в 04:34
поделиться

2 ответа

Хех, у меня была точно такая же проблема. Проблема в том, что вы используете набор форм!!! Формсеты позволяют всем полям в форме быть пустыми. Однако, если у вас 2 поля, а заполнено только одно, то он распознает ваши обязательные элементы. Это происходит потому, что наборы форм созданы для "массового добавления", и иногда вы не хотите заполнять все дополнительные формы на странице. Это очень раздражает; вы можете посмотреть мое решение здесь.

11
ответ дан 5 December 2019 в 20:15
поделиться

используйте:

если нет (formset.errors): ...

вместо:

, если formset.is_valid (): ...

-4
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: