आप एक कस्टम मॉडल फ़ील्ड प्रकार भी बना सकते हैं - http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom-model-fields देखें
इस मामले में, आप अंतर्निहित इंटेगरफिल्ड से 'इनहेरिट' कर सकते हैं और इसके सत्यापन तर्क को ओवरराइड कर सकते हैं।
जितना मैं इस बारे में सोचता हूं, मुझे एहसास होता है कि यह कई 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))
लेकिन, इसके लिए बहुत अधिक कोड की आवश्यकता होगी क्योंकि आप एक 'स्किप' पैरामीटर - रेंज (1, 50, 2) निर्दिष्ट कर सकते हैं - ज्ञान विचार ... ...