1

我在模型中有一个 many2many 字段:

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

4

2 回答 2

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
于 2013-10-31T09:56:17.110 回答
0

看一下这个片段,您可以将字段的小部件指定为FilteredSelectMultiple

于 2013-10-31T09:54:20.367 回答