0

장바구니에 autocomplete-light이 있습니다. modal form. 제안 상자에 동적 필터링을 적용하려고 했으므로 autocompletebasemodelchoice_for_request()을 사용했습니다. 그러나 choice_for_request()을 사용하기 때문에 제안 사항은 not according to the keyword typed이지만 입력 할 수있는 모든 값입니다. 이 레지스트리와 클래스가autocomplete_light가 choice_for_request로 올바른 제안을 표시하지 않습니다.

class CamenuForm(autocomplete_light.ModelForm): 
    class Meta: 
    model = Ca_dispensaries_item 
    exclude = ('dispensary',) 
    autocomplete_fields = ('item',) 

    def __init__(self, *args, **kwargs): 
    self.category = kwargs.pop('category', None) 
    super(CamenuForm, self).__init__(*args, **kwargs) 
    self.fields['item'].queryset=Items.objects.filter(product_type__name=self.category) 

:

은 내 양식이다

autocomplete_light.register(Items, AutoComplete) 

클래스 : 정말 changes_for_request으로 만들기 위해 어떤 변화 몰라요

class AutoComplete(autocomplete_light.AutocompleteModelBase): 
    search_fields=('item_name',) 
    def choices_for_request(self): 
     category = self.request.session.get('category','') 
     if category: 
     choices = Items.objects.filter(product_type__name=category) 
     return self.order_choices(choices)[0:self.limit_choices] 

제대로 작동하도록하려면

답변

0

다양한 문서를 통과 한 후, 같은 제대로 그것이 있어야로 근무 솔루션은

def choices_for_request(self): 
    category = self.request.session.get('category','') 
    item=self.request.GET.get('q','') 
    choices = self.choices.all() 
    if item: 
     choices = choices.filter(item_name__icontains=item) 
    super(AutoComplete, self).choices_for_request() 
    if category: 
     choices = choices.filter(product_type__name=category) 
    return self.order_choices(choices)[0:self.limit_choices] 

내가

item=self.request.GET.get('q','') 

autocomplete-lightget 방법과 값을 전송하는 미리 정의 된 문자 q를 사용

을 놓친입니다 user을 입력하십시오. q의 의미를 알아낼 수 없었습니다. 일부 히트와 재판 후에, 나는 제안 상자에 사용자가 주어진 값을 저장하는 데 사용된다는 것을 알게되었다.

관련 문제