【发布时间】:2022-01-07 13:11:25
【问题描述】:
我阅读了大多数关于这个问题的 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 函数中检查它,如果它不起作用则返回错误。我该怎么做?
【问题讨论】: