2010-02-21 8 views
1

Je veux développer un widget de quantité de base qui est une boîte de sélection déroulante, consommant un entier qui sera le montant maximum de la quantité, les utilisateurs peuvent choisir de 1 à la quantité maximale. Et à la fin, mon formulaire utilisera ce widget et si le montant donné est supérieur au maximum, il ne devrait pas valider. (en effet, les utilisateurs réguliers ne pourront pas sélectionner plus que le maximum, mais je suppose qu'il peut être essayé en envoyant une requête directe au serveur.)django quantité formulaire widget

Comment cela peut-il être fait?

Merci

modifier: Je pense qu'il peut être quelque chose comme cela pour commencer, mais je veux que mon champ soit une sélection (de 1 à quantité maximale max), non textinput champ.

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

Qu'est-ce que vous avez à ce jour, et comment ça ne marche pas? –

+0

bonjour Ignacio, j'ai édité le poste pour clarification. – Hellnar

Répondre

3

Ok je l'ai fait:

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 

sortie pour 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> 

valide aussi:

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