MaxValueValidator

Валидатор MaxValueValidator применяется к полям форм для проверки, что переданное значение не превышает заданное максимальное число. Он принимает обязательный аргумент limit_value - пороговое значение, которое нельзя превышать. Также можно передать необязательный параметр message для кастомизации сообщения об ошибке.

Синтаксис

pythonfrom django.core.validators import MaxValueValidator

MaxValueValidator(limit_value, message=None)

Пример . Использование в форме

Давайте создадим форму для оценки товара, где значение должно быть не больше 5:

pythonfrom django import forms
from django.core.validators import MaxValueValidator

class RatingForm(forms.Form):
  rating = forms.IntegerField(
    validators=[MaxValueValidator(5)]
  )

При попытке ввести число больше 5 валидация не пройдёт.

Пример . С кастомным сообщением

Добавим понятное сообщение об ошибке для пользователя:

pythonfrom django import forms
from django.core.validators import MaxValueValidator

class AgeForm(forms.Form):
  age = forms.IntegerField(
    validators=[
      MaxValueValidator(
        120,
        message="Возраст не может превышать 120 лет"
      )
    ]
  )

Проверка данных формы

Посмотрим, как валидатор работает при проверке отправленных данных:

pythonfrom django import forms
from django.core.validators import MaxValueValidator

class ScoreForm(forms.Form):
  score = forms.IntegerField(
    validators=[MaxValueValidator(100)]
  )

# Valid data
form = ScoreForm({'score': 85})
if form.is_valid():
  print("Form is valid")
  print(f"Score: {form.cleaned_data['score']}")

# Invalid data
form = ScoreForm({'score': 150})
if not form.is_valid():
  print("Form is invalid")
  print(f"Errors: {form.errors}")

Результат выполнения кода:

python"Form is valid"
"Score: 85"
"Form is invalid"
"Errors: <ul class='errorlist'><li>score<ul class='errorlist'><li>Ensure this value is less than or equal to 100.</li></ul></li></ul>"

Использование с полем DecimalField

Валидатор также работает с десятичными числами, проверяя их максимальное значение:

pythonfrom django import forms
from django.core.validators import MaxValueValidator

class PriceForm(forms.Form):
  price = forms.DecimalField(
    max_digits=10,
    decimal_places=2,
    validators=[MaxValueValidator(9999.99)]
  )

form = PriceForm({'price': '5000.00'})
if form.is_valid():
  print("Valid price")
  print(f"Price: {form.cleaned_data['price']}")

Результат выполнения кода:

python"Valid price"
"Price: 5000.00"

Смотрите также

  • валидатор MinValueValidator,
    который проверяет минимальное значение поля
  • валидатор MaxLengthValidator,
    который проверяет максимальную длину строки
  • валидатор MinLengthValidator,
    который проверяет минимальную длину строки
  • валидатор DecimalValidator,
    который проверяет десятичные значения на соответствие формату