如何制作django formset中的所有表单?我尝试验证cleaned_data
覆盖formset的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个表格,所有表格必须填写有效。在上面的例子中,我只是试图在干净中引发错误。 is_valid()
变为False,但未显示任何错误。
答案 0 :(得分:0)
有点难以理解其中错误未显示。
如果is_valid为False,那么好,它自己的验证工作正常。接下来要看的是模板层。你是如何检查错误的? {{form.errors}}或{{somefield.errors}}。
这里设置了清洁方法的方式,它们的错误不会与任何字段相关联,但应该放在所有错误插槽中。
干杯
答案 1 :(得分:0)
我遇到了同样的问题,并通过检查源来找出存储这些错误的位置。当您覆盖formset的clean方法并引发验证错误时,错误将存储在non_form_errors属性中。
因此,在模板中,您需要添加以下内容,假设formset的模板变量名为'formset':
{{ formset.non_form_errors }}