Django:在重写表单字段后,将筛选器_水平消失
我在模型中有许多字段:Django:在重写表单字段后,将筛选器_水平消失,django,django-forms,Django,Django Forms,我在模型中有许多字段: models.py pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True) filter_horizontal = ['pages',] class BannerAdminForm(forms.ModelForm): pages = forms.ModelMultipleChoiceField(queryset=Page.objects.filter(publisher_is
models.py
pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)
filter_horizontal = ['pages',]
class BannerAdminForm(forms.ModelForm):
pages = forms.ModelMultipleChoiceField(queryset=Page.objects.filter(publisher_is_draft=0), label='Pages')
class Meta:
model = Banners
class BannersAdmin(admin.ModelAdmin):
form = BannerAdminForm
filter_horizontal = ['pages',]
对于管理界面水平过滤器工作正常:
admin.py
pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)
filter_horizontal = ['pages',]
class BannerAdminForm(forms.ModelForm):
pages = forms.ModelMultipleChoiceField(queryset=Page.objects.filter(publisher_is_draft=0), label='Pages')
class Meta:
model = Banners
class BannersAdmin(admin.ModelAdmin):
form = BannerAdminForm
filter_horizontal = ['pages',]
但当我使用forms.Modelform(用于更改queryset)覆盖此字段时,在界面中,它开始显示为一个简单的
字段:
forms.py
pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)
filter_horizontal = ['pages',]
class BannerAdminForm(forms.ModelForm):
pages = forms.ModelMultipleChoiceField(queryset=Page.objects.filter(publisher_is_draft=0), label='Pages')
class Meta:
model = Banners
class BannersAdmin(admin.ModelAdmin):
form = BannerAdminForm
filter_horizontal = ['pages',]
admin.py
pages = models.ManyToManyField(Page, verbose_name='Pages', blank=True)
filter_horizontal = ['pages',]
class BannerAdminForm(forms.ModelForm):
pages = forms.ModelMultipleChoiceField(queryset=Page.objects.filter(publisher_is_draft=0), label='Pages')
class Meta:
model = Banners
class BannersAdmin(admin.ModelAdmin):
form = BannerAdminForm
filter_horizontal = ['pages',]
这个问题有什么解决办法吗?我查找了一些适用于modelmultipleechoicefield的特殊小部件,但没有找到任何东西。请看,您可以将字段的小部件指定为
FilteredSelectMultiple
请看,您可以将字段的小部件指定为FilteredSelectMultiple
这并不能解决实际问题,但是设置查询集的另一种方法:
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
这并没有解决实际问题,而是设置查询集的另一种方法:
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
陛下要写很多代码。。。但我认为这种改变可能会很有效。。。要写很多代码。。。但我认为这种改变也可能奏效