我有一個整數字段,但它們的默認小部件是TextInput。我想使用Select小部件,但我必須明確提供可能的值。Django自定義字段或小部件?
是否有可能從'initial', 'min_value' and 'max_value'
驗證規則integer!
字段自動生成?
我是否必須創建自己的字段,窗口小部件或兩者兼有?如何?
我有一個整數字段,但它們的默認小部件是TextInput。我想使用Select小部件,但我必須明確提供可能的值。Django自定義字段或小部件?
是否有可能從'initial', 'min_value' and 'max_value'
驗證規則integer!
字段自動生成?
我是否必須創建自己的字段,窗口小部件或兩者兼有?如何?
你可以用__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)]
這是怎麼了,我一般做特殊選擇:
def MyForm(forms.Form):
INTEGER_CHOICES = [(i, i) for i in range(MIN_VALUE, MAX_VALUE)]
my_integer = forms.ChoiceField(choices=INTEGER_CHOICES)
而不是反省我只是把最大值和最小值的變量在頂部簡單的模型字段。
而不是使用IntegerField,我使用ChoiceField。詳情請查看ChoiceField documentation。他們並不難用。
您可以定義字段在窗體的初始化方法,像這樣:
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)])
你肯定my_int.choices = ...是設置值正確的地方,因爲對我來說這沒」工作。我只設法使用widget = forms.Select(選擇= ...) – 2011-02-16 10:42:05