我有一个整数字段,但它们的默认小部件是TextInput。我想使用Select小部件,但我必须明确提供可能的值。
是否可以从'initial', 'min_value' and 'max_value'
字段的integer!
验证规则自动生成它们?
我是否必须制作自己的字段,小部件或两者?怎么样?
答案 0 :(得分:2)
您可以使用__init__
方法形式执行此操作。
def MyForm(forms.Form):
my_integer = forms.IntegerField(min_value=0, max_value=10, widget=forms.Select)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
my_int = self.fields['my_integer']
my_int.choices = [(i, i) for i in range(my_int.min_value, my_int.max_value)]
答案 1 :(得分:1)
这就是我通常做出特殊选择的方式:
def MyForm(forms.Form):
INTEGER_CHOICES = [(i, i) for i in range(MIN_VALUE, MAX_VALUE)]
my_integer = forms.ChoiceField(choices=INTEGER_CHOICES)
为了简单起见,我只是将min和max值放在顶部的变量中,而不是内省模型字段。
我使用ChoiceField而不是使用IntegerField。有关详细信息,请查看ChoiceField documentation。它们并不难使用。
答案 2 :(得分:1)
您可以在表单的 init 方法中定义字段,如下所示:
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
initial = 40
min_value = 10
max_value = 100
self.fields['the_field'] = forms.ChoiceField(choices=range(min_value, max_value + 1), initial=initial, validators=[MinValueValidator(min_value), MaxValueValidator(max_value)])