Проверка по всей модели для типа поля в 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()
Вернуться на верх