django1.2中将ManyToManyField呈现为checkbox

 

ManyToMany(一对多)关系,默认在呈现的时候是一个列表框,是可以多选则,需要使用按住ctrl或者shift键,然后点击鼠标才可以实现多选。

但是通常,这种多选应该使用checkbox来呈现,才好让大家理解和选择,否则大家可能不知道是可以多选的。

通过下面的代码就可以实现。

 

  
  
  
  
  1. class BlogForm(forms.ModelForm): 
  2.     prepopulated_fields={'slug':("title")} 
  3.      
  4.     categories = forms.ModelMultipleChoiceField( 
  5.                             queryset=Category.objects.all(), 
  6.                             widget=forms.CheckboxSelectMultiple()) 
  7.     tags=forms.ModelMultipleChoiceField( 
  8.                             queryset=Tag.objects.all(), 
  9.                             widget=forms.CheckboxSelectMultiple()) 
  10.      
  11.     class Meta: 
  12.         model=Blog 
  13.         exclude=["author"
  14.          

请注意上面代码中红色部分。

在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。

 

利用Media可以做很多的效果,例如slug字段的自动填充,后面会为大家放出来。

你可能感兴趣的:(django,checkbox,manytomany,休闲)