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