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)