django autocomplete light — ограничение выбора для полей внешнего ключа с помощью limit_choiches_to

Я использую django-autocomplete-light в приложении администратора django, но я не могу правильно отфильтровать выбор для поля fk с аргументом limit_choiches_to: я все еще получаю весь набор запросов. вот код:

# 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'
        )

Я также попытался переопределить метод choices_for_request в подклассе AutocompleteModelBase:

def choices_for_request(self):
    return MyModels.objects.filter(
            Q(dpt__in=Deps.MAIN_DEPARTMENTS),
            Q(user__is_active=True)
    )

Таким образом, у меня есть отфильтрованный набор запросов, но я теряю функцию автозаполнения (для каждого слова, которое я набираю, например, «Es», он начинает показывать мне варианты из буквы A)

Кто-нибудь может помочь мне с этим?

Благодарность


person Luke    schedule 29.04.2014    source источник


Ответы (1)


Опечатка: choiches в

choiches = MyModels.objects.filter(
person Steve Jalim    schedule 29.04.2014
comment
можно подробнее...? - person Luke; 29.04.2014
comment
Кажется, это работает следующим образом: def choices_for_request(self): self.choiches = MyModels.objects.filter( Q(dpt__in=Deps.MAIN_DEPARTMENTS), Q(user__is_active=True) ) return super(MyModels, self).choices_for_request() - person Luke; 29.04.2014
comment
Это НЕ выбор, это выбор! Хороший звонок @stevejalim - person jpic; 30.04.2014