我正在使用 Django 1.4 表单集,我想对表单集中的第一个表单执行不同的验证。
我有一个 LocationForm ,其中显示 4 个文本字段,允许用户输入最多 4 个位置:
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 是必需的,其余表单是可选的(这意味着用户必须在第一个表单中输入至少一个位置,但其余的是选修的)。
如果我修改表单,删除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)
或者这是错误的方法,有更好的方法吗?谢谢!