我想开发一个基本数量小部件,它是一个下拉选择框,消耗一个整数,它将是最大数量,用户可以从1到最大数量进行选择。
最后,我的表单将使用此窗口小部件,如果给定的数量大于最大值,则不应验证。 (事实上,普通用户将无法选择超过最大值,但我想可以通过向服务器发送直接请求来尝试。)
如何做到这一点?
由于
修改 我认为它可以是这样的,但我希望我的字段是一个选择(从1到最大最大数量),而不是textinput字段。
def quantity_field(quantity=1):
class QuantityForm(forms.Form):
forms.IntegerField(label="Purchase quantity",min_value=1,max_value=quantity,required=True,widget=forms.Select)
return QuantityForm
答案 0 :(得分:3)
好的我已经做到了:
def purchase_form(quantity=1):
class QuantityForm(forms.Form):
forms.IntegerField(label="Purchase quantity",min_value=1,max_value=quantity,required=True,widget=forms.Select(choices= [ (i,i) for i in range(1,quantity+1) ]) )
return QuantityForm
buy_form(10)的输出:
>>>print d
<tr><th>Purchase quantity:</th><td><select name="x">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select></td></tr>
也验证:
>>> d.clean(5)
5
>>> d.clean(11)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/forms/fields.py", line 187, in clean
raise ValidationError(self.error_messages['max_value'] % self.max_value)
ValidationError: [u'Ensure this value is less than or equal to 10.']