【问题标题】:django quantity form widgetdjango 数量表单小部件
【发布时间】:2011-01-19 07:45:51
【问题描述】:

我想开发一个基本数量的小部件,它是一个下拉选择框,消耗一个整数,这将是最大数量,用户可以从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

【问题讨论】:

  • 到目前为止你有什么,它怎么不工作?
  • 你好伊格纳西奥,我已经编辑了这篇文章以便澄清。

标签: django django-forms django-widget


【解决方案1】:

好的,我已经做到了:

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

purchase_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.']

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2013-04-03
    • 2017-10-27
    • 2011-10-29
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多