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 に答える