Django 1.4 フォームセットを使用しており、フォームセットの最初のフォームに対して別の検証を実行したいと考えています。
ユーザーが最大4つの場所を入力できるようにする4つのテキストフィールドを表示するLocationFormがあります。
class LocationForm(forms.Form):
user_entered_address = forms.CharField(required=False, max_length=255)
full_address = forms.CharField(max_length=255, required=False, widget=forms.HiddenInput())
city = forms.CharField(max_length=255, required=False, widget=forms.HiddenInput())
state = forms.CharField(max_length=255, required=False, widget=forms.HiddenInput())
country = forms.CharField(max_length=255, required=False, widget=forms.HiddenInput())
latitude = forms.CharField(required=False, widget=forms.HiddenInput())
longitude = forms.CharField(required=False, widget=forms.HiddenInput())
LocationFormSet = formset_factory(LocationForm, extra=4, max_num=4)
これは入力フィールドを表示するのにうまく機能しますが、フォームセットの最初の LocationForm を必須にし、残りのフォームをオプションにしたいと思います (つまり、ユーザーは最初のフォームに少なくとも 1 つの場所を入力する必要がありますが、残りはオプション)。
フォームを変更すると、次のものが削除されrequired=False
ます。
user_entered_address = forms.CharField(max_length=255)
次にuser_entered_address
、すべてのフォームに必要です。カスタムの clean() メソッドを作成する必要があると感じていますが、最初のフォームを見つけて、空白かどうかを判断し、user_entered_address
空白の場合は ValidationError を発生させる方法に行き詰まっています。
class BaseLocationFormSet(BaseFormSet):
def clean(self):
# How to do I find the first form and ensure user_entered_address isn't blank?
LocationFormSet = formset_factory(LocationForm, extra=4, max_num=4, formset=BaseLocationFormSet)
それとも、これは間違ったアプローチであり、これを行うためのより良い方法がありますか? ありがとう!