Django - 多个下拉表单

2024-06-06 15:52:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要建立一个django下拉框forms.Form字段,在该字段中我可以选择多个选项。我需要在表单的office字段上选择多个位置。

提交时,表单需要返回所选办公室的list(例如["New York", "Los Angeles"]["Austin"])。返回tuple也是可以接受的。


我现在所能做的就是为office构建一个multipleChoiceField,其中包含以下内容:

from django import forms

class my_Form(forms.Form):

    OPTIONS = [
        ("0", "*ALL"),
        ("1", "New York"),
        ("2", "Los Angeles"),
        ]

    office = forms.MultipleChoiceField(
            choices=OPTIONS,
            initial='0',
            widget=forms.SelectMultiple(),
            required=True,
            label='Office',
        )

导致此表单域布局:

enter image description here


但是,我希望这个字段是一个下拉列表,在页面上占用更少的空间。

我发现了这个djangosnippet,但是(1)有几个人提到它似乎过时了(我无法确认),并且(2)我首先想检查内置的django表单/小部件安装程序是否可以在使用自定义代码之前完成此任务。


Tags: djangoform表单new选项formslistoptions
3条回答

“下拉”框不支持HTML中的多个选择;浏览器将始终将其呈现为如图像所示的扁平框。

您可能想使用某种JS小部件-Select2是一种流行的小部件。有几个Django项目-django-select2django-easy-select-旨在简化将其集成到表单中的过程;我对这两个项目都没有经验。

(是的,这个片段——就像Djangosnippets上的许多东西一样——已经严重过时;“newforms”甚至在Django的1.0版本之前就被重命名为“forms”。)

您可以使用Django select2选择多个选项。在相应的HTML文件中包含以下代码。

<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script>

<select class="select_field_class" multiple="multiple" name="option" id="option">
      <option value="">Enter the option</option>
      {% for option in options %}
         <option value="{{ option.id }}">{{ option.name }}</option>
      {% endfor %}
</select>

$('.select_field_class').select2( { placeholder: "Select here", maximumSelectionSize: 100  } );

现在很晚了,但希望能对别人有所帮助。

您还可以结合使用django forms和select2小部件Select2MultipleWidget,使其看起来更干净。

class YourCreateForm(forms.ModelForm):
     CHOICES = (("address1","address1"), ("address2","address2"))
     address=forms.MultipleChoiceField(choices=CHOICES,widget=Select2MultipleWidget)

     class Meta:
         model = YourModel
         fields = ("field1","address",)

不要忘记安装和导入django select2小部件

相关问题 更多 >