0

私はautocomplete-lightdjango にありmodal formます。提案ボックスに動的フィルタリングを適用したかったので、 で使用choice_for_request()しましたautocompletebasemodel。ただし、 を使用しているためchoice_for_request()、候補はnot according to the keyword typed入力できるすべての値にすぎません。

これは私のフォームです:

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 )

クラス:

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]  

changes_for_request正しく機能させるため にどのような変更を加える必要があるか本当にわかりません

4

1 に答える 1

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。いくつかのヒットと試行の後、ユーザーが指定した値を提案ボックスに保存するために使用されることがわかりました。

于 2014-12-18T21:39:15.007 に答える