私はかなり大きなフォームを持っていますが、これには 2 つの可能性があります。これはイベントのフォームであり、イベントの場所はコンボボックス (ModelChoice クエリ) から選択できます。ただし、ユーザーが [新しい場所] チェックボックスをオンにすると、新しい場所を挿入するために必要なフィールドがフォームに表示され、[既存の場所] コンボボックスがリセットされる可能性があります。さて、これはすべてjavascript(jQuery)で非常にうまく機能しますが、私の問題はフォーム内の未使用のフィールドを検証する方法です.
簡単に言うと> 7 つのフォーム フィールドがあり、そのうち 3 つは常に必須 (イベント タイプ、日時など) で、もう 1 つはチェックボックス「新しい場所」の状態に依存します: new_location がチェックされている場合> 場所を検証するなどフィールドを無視し、残りを無視します (空にすることができます)。それ以外の場合は、場所フィールドを無視し、残りを検証します。
class EventForm(ModelForm):
area = forms.ModelChoiceField(
queryset=Area.objects.order_by('name').all(),
empty_label=u"Please pick an area",
label=u'Area',
error_messages={'required':u'The area is mandatory!'})
type = forms.ModelChoiceField(
queryset=SportType.objects.all(),
empty_label=None,
error_messages={'required':'Please pick a sport type!'},
label=u"Sport")
#shown only if new_location is unchecked - jQuery
location = forms.ModelChoiceField(
queryset=Location.objects.order_by('area').all(),
empty_label=u"Pick a location",
error_messages={'required':'Please pick a location'},
label=u'Location')
#trigger jQuery - hide/show new location field
new_location = forms.BooleanField(
required=False,
label = u'Insert new location?'
)
address = forms.CharField(
label=u'Locatio address',
widget=forms.TextInput(attrs={'size':'30'}),
error_messages={'required': 'The address is required'})
location_description = forms.CharField(
label=u'Brief location description',
widget=forms.Textarea(attrs={'size':'10'}),
error_messages={'required': 'Location description is mandatory'})
class Meta:
model = Event
fields = (
'type',
'new_location',
'area',
'location',
'address',
'location_description',
'description',
)