在多对多字段上使用水平过滤器时,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'),
}
我正在使用 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'),
}