Проверка по всей модели для типа поля в Django, т.е. проверка того, что все DecimalField модели больше 0
У меня есть три поля Decimal, которые имеют один и тот же валидатор:
`
class MyModel(models.Model):
one = models.DecimalField(validators=[great_than_zero])
two = models.DecimalField(validators=[great_than_zero]
three = models.DecimalField(validators=[great_than_zero]
`
Есть ли питонический способ принудительного применения этого валидатора для всей модели, чтобы ни одно десятичное поле не могло иметь отрицательное число. Если я знаю, что все мои десятичные поля будут положительными, было бы неплохо не править один и тот же кусок кода для каждого из них.
Вы можете определить поле самостоятельно с помощью:
# app_name/fields.py
from django.core.exceptions import ValidationError
from django.db.models import DecimalField
def greater_than_zero(value):
if value <= 0:
raise ValidationError('The value should be greater than zero.', code='min_value_eq')
class PositiveDecimalField(DecimalField):
default_validators = [greater_than_zero]
и затем используйте это поле в своих моделях:
# app_name/models.py
from app_name.fields import PositiveDecimalField
class MyModel(models.Model):
one = PositiveDecimalField()
two = PositiveDecimalField()
three = PositiveDecimalField()