ManyToMany(一對多)關系,預設在呈現的時候是一個清單框,是可以多選則,需要使用按住ctrl或者shift鍵,然後點選滑鼠才可以實作多選。
但是通常,這種多選應該使用checkbox來呈現,才好讓大家了解和選擇,否則大家可能不知道是可以多選的。
通過下面的代碼就可以實作。
class BlogForm(forms.ModelForm):
prepopulated_fields={'slug':("title")}
categories = forms.ModelMultipleChoiceField(
queryset=Category.objects.all(),
widget=forms.CheckboxSelectMultiple())
tags=forms.ModelMultipleChoiceField(
queryset=Tag.objects.all(),
class Meta:
model=Blog
exclude=["author"]
請注意上面代碼中紅色部分。
在django的form中有四個概念:
1. Widget,對應于html中的一個表單元素,例如<input type="text">或者是<textarea>,負責将widget呈現為html元素。
2. Field,負責驗證表單元素的内容是否符合某種規則。
3. Form,是一個field的集合,知道如何驗證和如何呈現表單元素。
4. Form Media,呈現Form元素所需要的css和javascript。
多選框正是使用了widget,将ManyToMany呈現為checkbox。
本文轉自 virusswb 51CTO部落格,原文連結:http://blog.51cto.com/virusswb/794691,如需轉載請自行聯系原作者