Я новичок в Django, и я был бы очень признателен, если бы вы предложили мне несколько советов. Я пытаюсь создать форму, которая позволяет пользователю отмечать один или несколько параметров. Я понял, что я должен использовать поле MultipleChoiceField с виджем CheckboxSelectMultiple, но в документации Django нет примера по этой теме. Буду признателен, если вы предложите мне пример и объясните, как мне обрабатывать результаты. Например, если у меня есть форма с параметрами a b c d, а пользователь тикает c и d. Также как указать выбор (я не хочу использовать db, список строк - это то, что я имею в виду)? Большое спасибо
Django формирует множественный выбор
Ответ 1
надеюсь, это поможет: D
from django import forms
class Test(forms.Form):
OPTIONS = (
("a", "A"),
("b", "B"),
)
name = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=OPTIONS)
Ответ 2
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']
в консоли
Ответ 3
вы можете проверить этот 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)