Джанго образуют множественный выбор - PullRequest
18 голосов
/ 21 апреля 2011

Я новичок в Джанго, и я был бы очень признателен, если бы вы могли дать мне несколько советов. Я пытаюсь создать форму, которая позволяет пользователю отметить один или несколько параметров. Я понял, что должен использовать поле MultipleChoiceField с виджетом CheckboxSelectMultiple, но документация Django не предлагает пример по этой теме. Я был бы признателен, если бы вы могли предложить мне пример и объяснить, как я справляюсь с результатами. Например, если у меня есть форма с параметрами a b c d, а пользователь отмечает c и d. Кроме того, как я могу указать варианты (я не хочу использовать БД, я имею в виду список строк)? Большое спасибо

Ответы [ 3 ]

45 голосов
/ 21 апреля 2011

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>

результаты:

checkboxselectmultiple

объяснение:

варианты:

Первый элемент в каждом кортеже - это фактическое значение, которое будет сохранено.Второй элемент - это удобочитаемое имя для опции.

получение выбранных полей:

form.cleaned_data.get('picked') приведет к списку 'фактическихценности'.Например, если я заменил # do something with your results на print picked, вы увидите:

[u'a', u'c']

в консоли

18 голосов
/ 21 апреля 2011

надеюсь, это поможет: D

from django import forms


    class Test(forms.Form):
        OPTIONS = (
            ("a", "A"),
            ("b", "B"),
            )
        name = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                         choices=OPTIONS)
0 голосов
/ 01 декабря 2016

Вы можете проверить это 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...