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,
который запускает процесс валидации формы