Почему моя форма Django не выдает ошибку валидации?

Я прочитал большинство SO случаев, касающихся этой проблемы, но все они довольно специфичны, поэтому я пришел сюда за помощью.

Я создал фильтр диапазона в своем проекте Django, который принимает два входных сигнала, установленных на нижнюю и верхнюю границы, и отображает диапазон данных в пределах этих границ.

Я пытаюсь сделать так, чтобы, когда пользователь вводит большее число в нижнем пределе, чем в верхнем пределе, возникала ошибка ValidationError, которую пользователь мог бы увидеть на лицевой стороне, и результаты не отображались. Я немного новичок в работе с формами Django, но я могу предоставить свой код, и, возможно, кто-то сможет предложить решение

forms.py

class PlayerForm(forms.Form):

# player forms
     points_high = forms.IntegerField(validators = [MinValueValidator(0)],
                            min_value=0, 
                            label = 'Reviews',
                            required = False,
                            widget = forms.NumberInput(
                                        attrs={'id': 'pointsHigh',
                                               'name': 'pointsHigh',
                                               'href': '#',
                                               'value': '',
                                               'class': "form-control"}))

     points_low = forms.IntegerField(validators = [MinValueValidator(0)], 
                                min_value=0, 
                                required = False,
                                widget = forms.NumberInput(
                                            attrs={'id': 'pointsLow',
                                                   'name': 'pointsLow',
                                                   'href': '#',
                                                   'value': '',
                                                   'class': "form-control"}))

     def check_bounds(self):
    """custom validation to check if low bound value is higher than high bound value"""
        data = self.cleaned_data
        player_low = data['player_low']
        player_high = data['player_high']

        if player_low and player_high:
            if player_low > player_high:
                raise forms.ValidationError(_("Low bound value cannot be higher than high bound value!"))
            
        return data

views.py

def player_points(request):

    players_form = PlayerForm()

    players_high = request.GET.get('players_high')
    players_low = request.GET.get('players_low')

    stat_kwargs = {points__lte: players_high,
                   points__gte: players_low}

    players = Players.objects.filter(**stat_kwargs)

    context = {
              'players': players
              'form': players_form
        }

 return render(request, 'nba/players.html', context)

По сути, цель состоит в том, чтобы принять ввод пользователя, проверить его в нашей функции check_bounds и вернуть ошибку, если он не работает. Как я могу это сделать?

Форма не будет вызывать вашу функцию автоматически. Вам нужно будет добавить в форму место для вызова вашей функции. Это можно сделать, переопределив функцию формы clean(). Что-то вроде этого:

def clean(self):
   cleaned_data = super().clean()
   self.check_bounds()

Это вызовет вашу функцию, когда ваша форма django обычно вызывает функцию clean().

Также я не совсем понимаю назначение строки return data в вашей функции check_bounds(). По какой причине вы поместили туда эту строку?

Вернуться на верх