カスタムモデルフィールドタイプを作成することもできます-http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom-model-fieldsを参照してください
この場合、組み込みのIntegerFieldから「継承」して、その検証ロジックをオーバーライドできます。
これについて考えるほど、多くのDjangoアプリにとってこれがいかに役立つかを実感します。おそらく、Django開発者がトランクへの追加を検討するためのパッチとして、IntegerRangeFieldタイプを送信できます。
これは私のために働いています:
from django.db import models
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)
次に、モデルクラスで次のように使用します(フィールドは上記のコードを配置するモジュールです)。
size = fields.IntegerRangeField(min_value=1, max_value=50)
負の範囲と正の範囲の場合(発振器の範囲のように):
size = fields.IntegerRangeField(min_value=-100, max_value=100)
本当にすばらしいのは、次のような範囲演算子で呼び出すことができるかどうかです。
size = fields.IntegerRangeField(range(1, 50))
ただし、 'skip'パラメーターを指定できるため、これには多くのコードが必要になります-range(1、50、2)-興味深いアイデア...