关于在django表单字段中为<option>
标签添加属性,有一个很好的解释here。但这仅适用于Select
widget。我想为SelectMultiple
widget做同样的事情。Django将属性添加到SelectMultiple <option>标签
我尝试以下(亚类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
以使表单字段呈现为多选部件 - 但是当表单被保存时,只保存一个值(不是多个值)!
如何将表单渲染为多选字段并保存所有选定的值?谢谢。
是员工领域一个manytomany字段 – Thameem
@Thameem是的。但请参阅下面的答案。 – NickBraunagel
默认情况下,manytomany字段将呈现为多重填充字段并在您调用form.save()时呈现。它会自动保存这些值。那么为什么你使用这个 – Thameem