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

Django autocomplete fields do NOT work when using a horizontal filter on a many to many field

我正在使用 Django 的自动完成灯制作自定义表单。在此模型中,还有另一个字段,我想对其应用水平过滤器。但是,每当我应用过滤器时,自动完成表单就不再起作用。

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

   filter_horizontal = ('many_to_many_field',)

欢迎任何解决方案,我四处搜索但似乎找不到任何其他类似问题。

对于和我有同样问题的人。我是如何解决这个问题的,我使用 autocomplete-light 为多对多字段制作了自己的自定义小部件。这仍然允许 select 多个但允许更小的字段,其大小与 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

然后将小部件添加到urls.py文件中,

urlpatterns = [
    url(
        r'^model-autocomplete/$',
        many_to_many_field_Autocomplete.as_view(),
        name='model-autocomplete',
    ),
]

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

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