フィールドのあるモデルがあります:
class Movie(models.Model):
genre = models.CommaSeparatedIntegerField(max_length=100, choices=GENRE_CHOICES, blank=True, default=0)
lang = models.CommaSeparatedIntegerField(max_length=100, choices=LANG_CHOICES, blank=True, default=0)
そして、そこから複数の選択フィールド(チェックボックスではない)を取得する必要があります。
私が見つけた1つの方法は、ModelAdminからフォームを再定義することです。
class MyMovieAdminForm(forms.ModelForm):
genre = forms.MultipleChoiceField(choices=GENRE_CHOICES)
lang = forms.MultipleChoiceField(choices=LANG_CHOICES)
class MovieAdmin(admin.ModelAdmin):
form = MyMovieAdminForm
admin.site.register(Movie, MovieAdmin)
ただし、フィールドごとに「ラベル」と「初期」を再宣言する必要があります。これは、DRYの原則には適していません。そして、私は理解していません、どうすれば各フィールドの初期値にオブジェクトの現在の値を設定できますか?
そして他の方法で、私がマニュアルで見つけたのはフォームフィールドオーバーライドです。トランクから開発バージョンを使用し、このコードを使用しようとしましたが、管理インターフェイスで選択フィールドが複数選択に変更されませんでした。
class MovieAdmin(admin.ModelAdmin):
formfield_overrides = {
models.CommaSeparatedIntegerField: {'widget': forms.SelectMultiple},
}
誰もが知っているかもしれませんが、複数の選択フィールドを定義するための最良の方法は何ですか?ありがとう!