here关于在django表单字段内向<option>
标记添加属性有很好的解释。但这仅适用于Select
widget。我想对SelectMultiple
widget做同样的事情。
我尝试了以下操作(创建Select
表单字段SelectMultiple
时,子类MySelectMultiple
和Model
并引用employees
):
class MySelect(forms.Select):
def __init__(self, *args, **kwargs):
super(MySelect, self).__init__(*args, **kwargs)
def render_option(self, selected_choices, option_value, option_label):
# original forms.Select code #
return u'<option custom_attribute="foo">...</option>'
class MySelectMultiple(MySelect):
def __init__(self, *args, **kwargs):
super(MySelectMultiple, self).__init__(*args, **kwargs)
employees = forms.ModelMultipleChoiceField(
widget=MySelectMultiple(attrs={}),
queryset=Employee.objects.all(),
)
但是呈现的表单仍显示为
Select
小部件,而不是SelectMultiple
小部件。我可以提供
attrs={'multiple':'multiple'}
到MySelectMultiple
以使表单字段呈现为多选小部件-但是保存表单时,仅保存一个值(不保存多个值)!如何将表单呈现为多选字段并保存所有选定值?谢谢。
最佳答案
您选择的倍数应该继承自SelectMultiple
而不是Select
:
class MySelectMultiple(SelectMultiple):
def render_option(self, selected_choices, option_value, option_label):
# original forms.Select code #
return u'<option custom_attribute="foo">...</option>'
看起来您的
__init__
方法不是必需的,因为它只是调用super()
。关于python - Django将属性添加到SelectMultiple <option>标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43524214/