在多对多字段上使用水平筛选时,Django自动完成字段不起作用

2024-09-27 21:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用django的自动完成灯来制作一个自定义表单。在这个模型中,还有一个我想应用水平过滤器的字段。但是每当我应用过滤器时,自动完成表单就不再工作了。在

@admin.register(model)
class modelAdmin(VersionAdmin):
   form = autoCompleteForm

   filter_horizontal = ('many_to_many_field',)

对于任何解决方案,我到处寻找,似乎找不到任何其他类似的问题。在


Tags: django模型formregister过滤器表单modeladmin
1条回答
网友
1楼 · 发布于 2024-09-27 21:26:13

对于任何和我有同样问题的人。我解决这个问题的方法是使用autocomplete light为多对多字段制作了自己的自定义小部件。这仍然允许选择多个,但允许选择一个更小的字段,其大小与charField相同。在

from dal import autocomplete

class many_to_many_field_Autocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        qs = *custom query if needed*

        #search option
        if self.q:
            qs = qs.filter(name__icontains=self.q)

        return qs

然后将小部件添加到网址.py文件

^{pr2}$

然后将自定义小部件添加到表单类内部的字段中

class VersionForm(forms.ModelForm):
    class Meta:
        model = model_name
        fields = '__all__'
        widgets = {
            'many_to_many_field_name': autocomplete.ModelSelect2Multiple(url='model-autocomplete'),
        }

相关问题 更多 >

    热门问题