Django 表单多选项

28 投票
3 回答
54671 浏览
提问于 2025-04-16 16:11

我刚开始学习Django,想请教一下大家一些指导。我想创建一个表单,让用户可以选择一个或多个选项。我了解到我需要使用MultipleChoiceField字段和CheckboxSelectMultiple这个小部件,但Django的文档里没有相关的例子。如果你能给我一个例子,并解释一下我该如何处理结果,我会非常感激。比如说,如果我的表单有选项a、b、c、d,而用户选择了c和d。我还想知道如何指定这些选项(我不想用数据库,只想用一个字符串列表)。非常感谢!

3 个回答

0

你可以查看这个链接 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)
57

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']

在你的控制台中

29

希望这能帮到你 :D

from django import forms


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

撰写回答