Как проверить, меньше ли одно поле другого в форме Django? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь проверить, не меньше ли время начала, чем время окончания. Если бы я не хотел вызывать ошибку.

Мой код выглядит так:

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.

1 Ответ

1 голос
/ 09 мая 2020

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 <b>clean</b>(self):
        cleaned_data = <b>super().clean()</b>
        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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...