Özel bir model alan türü de oluşturabilirsiniz - bkz. Http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom-model-fields
Bu durumda, yerleşik IntegerField öğesinden 'devralabilir' ve doğrulama mantığını geçersiz kılabilirsiniz.
Bunu daha çok düşündüğümde, bunun birçok Django uygulaması için ne kadar yararlı olacağını anlıyorum. Belki de bir IntegerRangeField türü, Django geliştiricileri için gövdeye eklemeyi düşünmeleri için bir yama olarak gönderilebilir.
Bu benim için çalışıyor:
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)
Daha sonra model sınıfınızda, bunu şu şekilde kullanırsınız (alan yukarıdaki kodu koyduğunuz modüldür):
size = fields.IntegerRangeField(min_value=1, max_value=50)
VEYA bir dizi negatif ve pozitif için (bir osilatör aralığı gibi):
size = fields.IntegerRangeField(min_value=-100, max_value=100)
Gerçekten harika olan şey, bu gibi aralık operatörü ile çağrılabilmesidir:
size = fields.IntegerRangeField(range(1, 50))
Ancak, bir 'atlama' parametresi - aralık (1, 50, 2) - İlginç bir fikir belirtebildiğiniz için çok daha fazla kod gerekir ...