11

フォームセットを保存しようとしていますが、必須フィールドがあるにもかかわらず 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('worked') get が呼び出されます。

ここで何かが欠けているかもしれませんが、何が悪いのかわかりません。私がしたいのは、他のフォームと同じように、フィールドが入力されていない場合にエラーを吐き出す必要がある場合です。何かアイデアはありますか?

4

4 に答える 4

15

へー、私はこれとまったく同じ問題を抱えていました。問題は、フォームセットを使用していることです!! フォームセットでは、フォーム内のすべてのフィールドを空白にすることができます。ただし、2 つのフィールドがあり、1 つだけを入力すると、必要なものが認識されます。これは、フォームセットが「一括追加」用に作成されており、ページ上のすべての余分なフォームに入力したくない場合があるためです。本当に忌々しい; ここで私のソリューションを見ることができます。

于 2010-03-16T05:02:13.680 に答える
3

必須のフィールドごとに、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' を指定しています。

それが役立つことを願っています。

于 2017-12-08T07:07:12.963 に答える
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)

幸運を!

于 2010-10-30T17:35:19.637 に答える
-4

使用する:

ない場合(formset.errors):..。

それ以外の:

formset.is_valid()の場合:..。

于 2010-06-23T11:24:25.603 に答える