0

autocomplete-light在 django 中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-light使用get方法和预定义的文字q来传输user. 我无法破解 的含义q。经过一番尝试和尝试,我知道它用于将用户给定的值存储在建议框中。

于 2014-12-18T21:39:15.007 回答