Djangoのモデルに数値フィールドの範囲を定義する
models.IntegerFieldのvalidatorsにValidatorのインスタンスをリストで渡す
以下のモデルのModelFormは1以上、100以下の場合は正しい値として扱う
class Person(models.Model): name = models.CharField(max_length=100) age = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(100)])
または、範囲を指定できるカスタムIntegerFieldを定義してそれを使う
class IntegerRangeField(models.IntegerField): def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs): self.min_value, self.max_value = min_value, max_value models.IntegerField.__init__(self, verbose_name, name, **kwargs) def formfield(self, **kwargs): defaults = {'min_value': self.min_value, 'max_value':self.max_value} defaults.update(kwargs) return super(IntegerRangeField, self).formfield(**defaults) class Person(models.Model): name = models.CharField(max_length=100) age = IntegerRangeField(min_value=1, max_value=100)