Django 表单集必填
如何让Django中的所有表单都变成必填项?我尝试通过重写表单集的clean()方法来验证所有字段是否都有填写,但它只是静默失败,没有显示任何错误信息。
谢谢!
源代码:
class BaseScheduleForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BaseScheduleForm, self).__init__(*args, **kwargs)
self.fields['day'].widget = forms.HiddenInput()
self.fields['user'].widget = forms.HiddenInput()
class Meta:
model = Schedule
def clean_end_time(self):
start_time = self.cleaned_data.get('start_time')
end_time = self.cleaned_data['end_time']
if start_time and end_time:
if end_time <= start_time:
raise forms.ValidationError("End time must be later that start time.")
return end_time
class BaseScheduleFormset(forms.models.BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(BaseScheduleFormset, self).__init__(*args, **kwargs)
for number, weekday in enumerate(WEEKDAYS):
self.forms[number].day_name = weekday[1]
def clean(self):
raise forms.ValidationError('You must specify schedule for the whole week')
ScheduleFormset = forms.models.modelformset_factory(Schedule, extra=7, max_num=7,
form=BaseScheduleForm, formset=BaseScheduleFormset)
这里有7个表单,每个表单对应一天,所有表单都必须填写才能有效。在上面的例子中,我只是尝试在clean方法中抛出错误。虽然is_valid()
变成了False,但没有显示任何错误信息。
2 个回答
0
我之前也遇到过这个问题,后来通过查看源代码找到了这些错误存储的位置。当你重写一个表单集的清理方法并抛出验证错误时,这些错误会被存储在 non_form_errors 属性里。
所以在你的模板中,你需要添加以下内容,假设你的表单集变量叫做 'formset':
{{ formset.non_form_errors }}
0
有点难理解错误在哪里没有显示出来。
如果is_valid是False,那就很好,说明验证本身是有效的。接下来要查看的就是模板层。你是怎么检查错误的?是用{{form.errors}}还是{{somefield.errors}}。
这里的clean方法设置方式是,它们的错误不会和任何字段关联,而是应该放在所有错误的地方。
谢谢!