簡體   English   中英

Django formset不驗證

[英]Django formset doesn't validate

我試圖保存一個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')被稱為似乎假設它是一個有效的形式。

我可能在這里遺漏了一些東西,但我看不出有什么不對勁。 我想要發生的是,就像任何其他形式一樣,如果字段需要在未填寫時吐出錯誤。任何想法?

嘿,我遇到了同樣的問題。 問題是你正在使用formset !! 表單集允許表單中的所有字段為空。 但是,如果您有2個字段,並且只填寫一個字段, 那么它將識別您所需的內容。 這樣做是因為formset是為“批量添加”而制作的,有時您不希望在頁面上填寫所有額外的表單。 真煩人 你可以在這里看到我的解決方案

對於所需的每個字段,請在attrs參數中添加一個額外的條目


    resident_status = forms.ChoiceField(widget=forms.Select(
        attrs={'class': 'form-control', 'required': 'required'}), choices=President.RESIDENT_STATUS,
        required=True)


正如您所看到的,我為django的表單驗證維護了required = True,但指定了'required':'required',模板要求該字段是必需的。

希望有所幫助。

添加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)

祝好運!

使用:

如果沒有(formset.errors):...

代替:

如果formset.is_valid():...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM