Django:重写表单字段后消失filter_horizo​​ntal

时间:2013-10-31 09:43:14

标签: django django-forms

我在模型中有很多字段:

models.py

pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)

对于管理界面 filter_horizo​​ntal 效果很好:

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 寻找了一些特殊的小部件,但没有找到任何东西。

2 个答案:

答案 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