首页 > 解决方案 > 如何在 Django 表单中检查一个字段是否小于另一个字段?

问题描述

我正在尝试检查开始时间是否小于结束时间。如果我不想引发错误。

我的代码如下所示:

class TimeOpeningHoursForm(forms.ModelForm):
    class Meta:
        model = BusinessOpeningHours
        fields = ('mon_st', 'mon_end', ...)
        widgets = {
            'mon_st': Select(attrs={'class': 'form-control'}),
            'mon_end': Select(attrs={'class': 'form-control'}),
            ...
        }

    def compare_mon(self):
        cleaned_data = self.cleaned_data
        st = cleaned_data['mon_st']
        end = cleaned_data['mon_end']
        if st > end :
             raise forms.ValidationError("The start time must be less than the end time.")
        else:
              return cleaned_data

我的验证代码就像根本不存在一样工作。不引发错误或验证正确性。在视图中,当然,我通过is_valid方法检查表单。

标签: pythondjango

解决方案


Django 不会自动运行这个方法。您可以覆盖自动调用的.clean()方法 [Django-doc]以验证相互依赖的字段:

class TimeOpeningHoursForm(forms.ModelForm):
    class Meta:
        model = BusinessOpeningHours
        fields = ('mon_st', 'mon_end')
        widgets = {
            'mon_st': Select(attrs={'class': 'form-control'}),
            'mon_end': Select(attrs={'class': 'form-control'})
        }

    def clean(self):
        cleaned_data = super().clean()
        st = cleaned_data['mon_st']
        end = cleaned_data['mon_end']
        if st > end :
             raise forms.ValidationError('The start time must be less than the end time.')
        return cleaned_data

推荐阅读