【问题标题】:Django form multiple choiceDjango表单多项选择
【发布时间】:2011-08-10 11:17:47
【问题描述】:

我是 Django 的新手,如果您能给我一些指导,我将不胜感激。我正在尝试创建一个允许用户勾选一个或多个选项的表单。我知道我必须将 MultipleChoiceField 字段与 CheckboxSelectMultiple 小部件一起使用,但 Django 文档没有提供有关此主题的示例。如果您能给我一个例子并解释我如何处理结果,我将不胜感激。例如,如果我有一个带有选项 a b c d 的表单,并且用户勾选 c 和 d。另外我如何指定选择(我不想使用数据库,我想到的是字符串列表)?非常感谢

【问题讨论】:

    标签: python django


    【解决方案1】:

    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>
    

    结果:

    解释:

    选择:

    每个元组的第一个元素是 要存储的实际值。第二 element 是人类可读的名称 选项。

    获取选中的框:

    form.cleaned_data.get('picked') 将生成一个“实际值”列表。例如,如果我将 # do something with your results 替换为 print picked,您会看到:

    [u'a', u'c']
    

    在您的控制台中

    【讨论】:

    • 非常感谢..它真的为我清理了一切。我还有一个问题。当我尝试处理结果时,我会尝试将列表中的每个元素处理为 u'a' 或字符串 'a'。
    • 如何获取人类可读名称列表?我需要列出元组的第二个选项。
    • initial_values = ['a', 'c'] 选择 = forms.MultipleChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple(), initial=initial_values)
    • 渲染出来的 HTML 是什么样子的?
    【解决方案2】:

    希望这会有所帮助:D

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

    【讨论】:

    • 如何让 Django 在编辑表单时显示已经保存/选择的值?
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 2016-03-22
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多