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>
результаты:

объяснение:
варианты:
Первый элемент в каждом кортеже - это фактическое значение, которое будет сохранено.Второй элемент - это удобочитаемое имя для опции.
получение выбранных полей:
form.cleaned_data.get('picked')
приведет к списку 'фактическихценности'.Например, если я заменил # do something with your results
на print picked
, вы увидите:
[u'a', u'c']
в консоли