РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
471 of 818 menu

StepValueValidator

Валидатор StepValueValidator применяется к полям формы для проверки, что введенное значение делится на заданный шаг без остатка. Он принимает два аргумента: обязательный step - размер шага, и необязательный offset - смещение, которое определяет начальную точку отсчета. Валидатор автоматически используется полями форм на основе моделей, если в модели для числового поля задан параметр step. В случае ошибки валидации генерируется исключение ValidationError с соответствующим сообщением.

Синтаксис

from django.core.validators import StepValueValidator validator = StepValueValidator(step, offset=None)

Параметры валидатора:

  • step - обязательный параметр, определяет шаг, которому должно быть кратно значение. Может быть целым или числом с плавающей точкой.
  • offset - необязательный параметр, задает смещение от нуля. По умолчанию равен 0, что означает проверку на кратность шагу, начиная с нуля.

Пример . С полем формы

Создадим форму с числовым полем, которое принимает только значения, кратные 5:

from django import forms from django.core.validators import StepValueValidator class ProductForm(forms.Form): quantity = forms.IntegerField( validators=[StepValueValidator(5)], label="Quantity" )

Если пользователь введет значение 12, которое не кратно 5, валидация вернет ошибку. Правильными значениями будут 5, 10, 15 и так далее.

Пример . С offset

Используем смещение для проверки значений, которые должны быть кратны шагу, начиная с определенного числа. Например, допустимые значения: 2, 7, 12:

from django import forms from django.core.validators import StepValueValidator class PricingForm(forms.Form): price = forms.IntegerField( validators=[StepValueValidator(5, offset=2)], label="Price" )

В этом примере валидатор пропустит значения 2, 7, 12, но отклонит 3 или 10. Формула проверки: (value - offset) % step == 0.

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

При создании формы на основе модели, валидатор автоматически добавляется для поля с параметром step:

from django.db import models from django import forms class Product(models.Model): score = models.IntegerField(step=10) name = models.CharField(max_length=100) class ProductForm(forms.ModelForm): class Meta: model = Product fields = ['score', 'name']

После создания экземпляра формы и передачи невалидных данных, ошибка будет добавлена в словарь errors:

form = ProductForm({'score': 25, 'name': 'Sample Product'}) if not form.is_valid(): print(form.errors)

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

{ "score": ["Ensure this value is a multiple of step 10."] }

Работа с числами с плавающей точкой

Валидатор также поддерживает числа с плавающей точкой. Например, для поля с шагом 0.5:

from django import forms from django.core.validators import StepValueValidator class MeasurementForm(forms.Form): weight = forms.FloatField( validators=[StepValueValidator(0.5)], label="Weight" )

Валидатор пропустит значения 1.5, 2.0, 2.5, но отклонит 1.7 или 3.2.

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

  • валидатор MaxValueValidator,
    который проверяет, что значение не превышает заданный максимум
  • валидатор MinValueValidator,
    который проверяет, что значение не меньше заданного минимума
  • класс Form,
    который используется для создания форм в Django
  • метод is_valid,
    который запускает процесс валидации формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить