关于Django自动完成指示灯:Django自动完成指示灯-使用limit_choices_to限制外键字段的选择

django autocomplete light - limiting choiches for foreign key fields with limit_choiches_to

我在django管理应用程序中使用django-autocomplete-light,但我无法使用limit_choiches_to参数为fk字段正确过滤choiches:我仍然可以获取整个查询集。这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# autocomplete_light.py
from django.db.models import Q

import autocomplete_light

from myapp.models import MyClass
from otherapp.models import Deps


class MyClassAutocomplete(autocomplete_light.AutocompleteModelBase):
   """ MyClass autocomplete widget class"""
    choiches = MyModels.objects.filter(
            Q(dpt__in=Deps.MAIN_DEPARTMENTS),
            Q(user__is_active=True)
        )
    search_fields = ['^full_name', 'initials']
    attrs = {'placeholder': 'Type a name'}

autocomplete_light.register(MyClass, MyClassAutocomplete)




# admin.py
class SampleModelAdminForm(forms.ModelForm):
    class Meta:
        link_attrs = {'cols': 105, 'rows': 3}
        model = SampleModel

    def __init__(self, *args, **kwargs):
        super(SampleModelAdminForm, self).__init__(
            *args, **kwargs
        )
        self.fields['my_fk'].widget = autocomplete_light.ChoiceWidget(
            'MyClassAutocomplete'
        )

我还尝试覆盖AutocompleteModelBase子类中的choices_for_request方法:

1
2
3
4
5
def choices_for_request(self):
    return MyModels.objects.filter(
            Q(dpt__in=Deps.MAIN_DEPARTMENTS),
            Q(user__is_active=True)
    )

通过这种方式,我获得了已过滤的查询集,但是我松开了自动完成功能(对于我键入的每个单词,例如'Es',它开始向我显示A字母的choiches)

有人可以帮我吗?

谢谢


错别字: in

1
choiches = MyModels.objects.filter(