আপনি একটি কাস্টম মডেল ক্ষেত্রের ধরণও তৈরি করতে পারেন - দেখুন http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom-model-fields
এই ক্ষেত্রে, আপনি অন্তর্নির্মিত ইন্টিজারফিল্ড থেকে 'উত্তরাধিকারী' হতে এবং এর বৈধতা যুক্তিকে ওভাররাইড করতে পারেন।
আমি এই সম্পর্কে যত বেশি চিন্তা করি, আমি বুঝতে পারি এটি অনেক জ্যাঙ্গো অ্যাপ্লিকেশনের জন্য কতটা কার্যকর। জাঙ্গো ডেভসদের ট্রাঙ্কে যুক্ত করার বিষয়টি বিবেচনা করার জন্য প্যাচ হিসাবে কোনও ইন্টিজারঞ্জেজফিল্ড টাইপ জমা দেওয়া যেতে পারে।
এটি আমার পক্ষে কাজ করছে:
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) নির্দিষ্ট করতে পারেন - যদিও আকর্ষণীয় ধারণা ...