django 1.2でManyToManyFiledを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には4つの概念があります.
1.widgetはhtml要素としてwidgetを提示することを担当する、htmlのフォーム要素に対応するWidget.
2.Fieldは、フォーム要素の内容が何らかのルールに合致しているかどうかを検証します.
3.Formは、フォーム要素を検証し、どのように表示するかを知るfieldの集合です.
4.FormMedia、Form要素に必要なcssとjavascriptを表示します.
 
マルチ選択ボックスはwidgetを使用して、ManyToManyをcheckboxとして表示します.
 
Mediaを利用すると、slugフィールドの自動埋め込みなど、多くの効果が得られます.