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(),
- widget=forms.CheckboxSelectMultiple())
- 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,如需转载请自行联系原作者