виджет формы количества Джанго - PullRequest
1 голос
/ 21 февраля 2010

Я хочу разработать виджет базового количества, представляющий собой выпадающий список, в котором используется целое число, которое будет максимальным количеством, пользователи могут выбрать от 1 до максимального количества.

И в концемоя форма будет использовать этот виджет и, если каким-то образом данная сумма будет больше максимальной, она не должна проверяться.(Действительно, обычные пользователи не смогут выбрать больше, чем максимум, но я думаю, что это можно попробовать, отправив прямой запрос на сервер.)

Как это можно сделать?

Спасибо

edit: Я думаю, что это может быть что-то вроде этого для начала, однако я хочу, чтобы мое поле было выделенным (от 1 до максимального количества), а не полем ввода текста.

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

1 Ответ

3 голосов
/ 21 февраля 2010

Хорошо, я сделал это:

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