2011-04-21 23 views
12

Django'da yeni biriyim ve bana biraz rehberlik sunabilirseniz çok memnun olurum. Bir kullanıcının bir veya daha fazla seçeneği işaretlemesine izin veren bir form oluşturmaya çalışıyorum. CheckBoxSelectMultiple widget ile MultipleChoiceField alanını kullanmam gerektiğini, ancak Django belgelerinin bu konuyla ilgili bir örnek sunmadığını anladım. Bana bir örnek sunabilir ve sonuçları nasıl ele alacağımı açıklarsanız minnettar olurum. Örneğin, seçeneklerle bir formum varsa ve b c d ve kullanıcı c ve d tuşlarını işaretler. Ayrıca seçimleri nasıl belirtebilirim (bir db kullanmak istemiyorum, aklımın bir listesi aklımda olan şey)? Çok teşekkürler bu yardımcı olurDjango çoktan seçmeli

cevap

13

umut: D

from django import forms 


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

kontrol edebilirsiniz formu düzenleme – YoYo

36

some_template.html

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)) 

forms.py

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

sonuçları:

checkboxselectmultiple

açıklama:

seçenekler:

her demet içinde birinci eleman depolanacak gerçek değerdir. İkinci öğesi, için insan tarafından okunabilir adıdır.

alma seçilen kutuları:

form.cleaned_data.get('picked') 'gerçek değerler' listesi ile sonuçlanacaktır. Ben print picked ile # do something with your results yerini Örneğin, gördüğünüz:

[u'a', u'c'] 

sizin konsolda

+0

Çok teşekkürler, benim için gerçekten bir şeyler temizledim. Hala bir sorum var. Sonuçları ele almaya çalıştığımda, listenin her bir öğesini, 'a' ya da 'a' dizesiyle ele almaya çalışacağım. – Bigdinrock

+0

bu gerçekten güzel bir cevap! teşekkür ederim! – user1451340

+1

İnsan tarafından okunabilir adların listesi nasıl alınır? İkinci seçenek tuple listesine ihtiyacım var. –

0

Eğer Zaten/seçili değerleri zaman kaydedilen Django ekran yapabilirim Bu nasıl 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) 
İlgili konular