我在模型中有很多字段:
models.py
pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)
对于管理界面 filter_horizontal 效果很好:
admin.py
filter_horizontal = ['pages',]
但是当我覆盖此字段时,使用 forms.Modelform (用于更改查询集) - 在界面中它开始显示为简单的<select>
字段:
forms.py
class BannerAdminForm(forms.ModelForm):
pages = forms.ModelMultipleChoiceField(queryset=Page.objects.filter(publisher_is_draft=0), label='Pages')
class Meta:
model = Banners
admin.py
class BannersAdmin(admin.ModelAdmin):
form = BannerAdminForm
filter_horizontal = ['pages',]
这个问题有解决办法吗?我为 ModelMultipleChoiceField 寻找了一些特殊的小部件,但没有找到任何东西。
答案 0 :(得分:1)
这不是解决实际问题,而是设置查询集的另一种方法:
class BannerAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BannerAdminForm, self).__init__(*args, **kwargs)
self.fields['pages'].queryset = Page.objects.filter(publisher_is_draft=0)
class Meta:
model = Banners
答案 1 :(得分:0)
查看this snippet,您可以将字段的小部件指定为FilteredSelectMultiple