추가 유연성을 원하고 모델 필드를 변경하지 않으려는 경우 최상의 솔루션이 있습니다. 이 사용자 정의 유효성 검사기를 추가하십시오.
#Imports
from django.core.exceptions import ValidationError
class validate_range_or_null(object):
compare = lambda self, a, b, c: a > c or a < b
clean = lambda self, x: x
message = ('Ensure this value is between %(limit_min)s and %(limit_max)s (it is %(show_value)s).')
code = 'limit_value'
def __init__(self, limit_min, limit_max):
self.limit_min = limit_min
self.limit_max = limit_max
def __call__(self, value):
cleaned = self.clean(value)
params = {'limit_min': self.limit_min, 'limit_max': self.limit_max, 'show_value': cleaned}
if value: # make it optional, remove it to make required, or make required on the model
if self.compare(cleaned, self.limit_min, self.limit_max):
raise ValidationError(self.message, code=self.code, params=params)
그리고 그것은 다음과 같이 사용될 수 있습니다 :
class YourModel(models.Model):
....
no_dependents = models.PositiveSmallIntegerField("How many dependants?", blank=True, null=True, default=0, validators=[validate_range_or_null(1,100)])
두 매개 변수는 max 및 min이며 널을 허용합니다. 표시된 if 문을 제거하거나 모델에서 필드를 blank = False, null = False로 변경하여 원하는 경우 유효성 검사기를 사용자 정의 할 수 있습니다. 물론 마이그레이션이 필요합니다.
참고 : Django는 PositiveSmallIntegerField에서 범위의 유효성을 검사하지 않기 때문에 유효성 검사기를 추가해야했습니다. 대신이 필드에 대해 smallint (postgres)를 생성하고 지정된 숫자가 범위를 벗어나면 DB 오류가 발생합니다.
이것이 도움이되기를 바랍니다 :) Django의 Validator에 대한 추가 정보 .
추신. django.core.validators의 BaseValidator를 기반으로 대답했지만 코드를 제외하고는 모두 다릅니다.