2011-04-21 4 views
12

Je suis un débutant dans Django et j'apprécierais vraiment si vous pouviez m'offrir quelques conseils. J'essaye de créer un formulaire qui permet à un utilisateur de cocher une ou plusieurs options. J'ai compris que je devais utiliser le champ MultipleChoiceField avec un widget CheckboxSelectMultiple mais la documentation de Django n'offre pas d'exemple sur ce sujet. Je vous serais reconnaissant si vous pouviez me donner un exemple et expliquer comment je gère les résultats. Par exemple si j'ai un formulaire avec les options a b c d, et que l'utilisateur cochera c et d. Aussi, comment puis-je spécifier les choix (je ne veux pas utiliser un db, une liste de chaînes est ce que j'ai en tête)? Merci beaucoupDjango formulaire multiple choix

Répondre

13

espérons que cette aide: D

from django import forms 


    class Test(forms.Form): 
     OPTIONS = (
      ("a", "A"), 
      ("b", "B"), 
      ) 
     name = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, 
             choices=OPTIONS) 
+0

Comment puis-je faire afficher Django déjà enregistré/valeurs sélectionnées lorsque éditer le formulaire? – YoYo

36

forms.py

class SomeForm(forms.Form): 
    CHOICES = (('a','a'), 
       ('b','b'), 
       ('c','c'), 
       ('d','d'),) 
    picked = forms.MultipleChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple()) 

views.py

def some_view(request): 
    if request.method == 'POST': 
     form = SomeForm(request.POST) 
     if form.is_valid(): 
      picked = form.cleaned_data.get('picked') 
      # do something with your results 
    else: 
     form = SomeForm 

    return render_to_response('some_template.html', {'form':form }, 
     context_instance=RequestContext(request)) 

some_template.html

<form method='post'> 
    {{ form.as_p }} 
    <input type='submit' value='submit'> 
</form> 

résultats:

checkboxselectmultiple

explication:

choix:

Le premier élément de chaque tuple est la valeur réelle à stocker. Le deuxième élément est le nom lisible par l'utilisateur pour l'option .

obtenir des boîtes sélectionnées:

form.cleaned_data.get('picked') entraînera une liste des 'valeurs réelles'. Par exemple, si je l'ai remplacé le # do something with your results avec print picked vous voyez:

[u'a', u'c'] 

dans votre console

+0

Merci beaucoup ... J'ai vraiment éclairci les choses pour moi. J'ai encore une question de plus. Quand j'essaierai de gérer les résultats, j'essaierai de gérer chaque élément de la liste en tant que u'a 'ou juste la chaîne' a '. – Bigdinrock

+0

c'est une très bonne réponse! Je vous remercie! – user1451340

+1

Comment prendre la liste des noms lisibles par l'homme? J'ai besoin de prendre la liste de la deuxième option de tuple. –

0

vous pouvez vérifier https://pypi.python.org/pypi/django-multiselectfield/

from multiselectfield import MultiSelectField 

# ... 

MY_CHOICES = (('item_key1', 'Item title 1.1'), 
      ('item_key2', 'Item title 1.2'), 
      ('item_key3', 'Item title 1.3'), 
      ('item_key4', 'Item title 1.4'), 
      ('item_key5', 'Item title 1.5')) 

MY_CHOICES2 = ((1, 'Item title 2.1'), 
      (2, 'Item title 2.2'), 
      (3, 'Item title 2.3'), 
      (4, 'Item title 2.4'), 
      (5, 'Item title 2.5')) 

class MyModel(models.Model): 

    # ..... 

    my_field = MultiSelectField(choices=MY_CHOICES) 
    my_field2 = MultiSelectField(choices=MY_CHOICES2, 
          max_choices=3, 
          max_length=3)