我有一个带有字段的模型:
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)
我需要从中获取多个选择字段(不是复选框)。
我发现的一种方法是从 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 原则。而且我不明白,如何为每个字段的初始值设置对象的当前值?
而我在手册中发现的其他方式是formfield-overrides。我使用主干中的开发版本,并尝试使用此代码,但它没有将我的选择字段更改为管理界面中的多选:
class MovieAdmin(admin.ModelAdmin):
formfield_overrides = {
models.CommaSeparatedIntegerField: {'widget': forms.SelectMultiple},
}
可能有人知道,定义多个选择字段的最佳方法是什么?谢谢!