關於在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