คุณสามารถสร้างประเภทฟิลด์โมเดลที่กำหนดเองได้ - ดูhttp://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom-model-fields
ในกรณีนี้คุณสามารถ 'รับช่วง' จาก IntegerField ในตัวและแทนที่ตรรกะการตรวจสอบ
ยิ่งฉันคิดถึงสิ่งนี้มากเท่าไหร่ฉันก็รู้ว่ามันจะมีประโยชน์กับแอพ Django มากแค่ไหน บางทีประเภท IntegerRangeField อาจถูกส่งเป็นปะสำหรับ Django devs เพื่อพิจารณาเพิ่มลงใน trunk
นี่ใช้งานได้สำหรับฉัน:
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) - แนวคิดที่น่าสนใจแม้ว่า ...