2010-02-21 82 views
1

我想開發一個基本數量小部件,它是一個下拉選擇框,使用一個整數,它將成爲最大數量,用戶可以從1到最大數量中進行選擇。django數量窗體小部件

最後我的表單將使用這個小部件,並且如果給定的數量大於最大值,它不應該驗證。 (的確,普通用戶將無法選擇超過最大值,但我想可以通過向服務器發送直接請求來嘗試。)

這怎麼辦?

感謝

編輯: 我認爲它可以是這樣開始說起,不過,我想我的領域是一個選擇(從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

你有什麼到目前爲止,它怎麼不工作? – 2010-02-21 11:09:29

+0

你好Ignacio,我已經編輯過這個帖子的澄清。 – Hellnar 2010-02-21 11:47:21

回答

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 

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