gpt4 book ai didi

django - 如何使用自动完成灯创建依赖下拉列表

转载 作者:行者123 更新时间:2023-12-02 01:42:40 25 4
gpt4 key购买 nike

我使用 Django Model Formautocomplete_light 创建了一个表单。我想根据调用类时传递的参数过滤下拉列表 item 中的建议。

我的表格是

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)

我根据传递的 category 的值在 __init__ 中应用了一个过滤器,但它似乎不起作用。

注册表是

autocomplete_light.register(Items,search_fields=('item_name',))

表单被称为

form = CamenuForm(request.POST or None, category=category)

请建议我一种方法,以便我可以根据调用表单时传递的值来优化搜索。

我试过用

修改它
class AutoComplete(autocomplete_light.AutocompleteModelBase):
search_fields=('item_name',)
def choices_for_request(self):
category = self.request.POST.get('category', 'none')
print category
choices = self.choices.all()
if category:
choices = choices.filter(product_type__name=category)
return self.order_choices(choices)[0:self.limit_choices]

和注册为 autocomplete_light.register(项目,自动完成)通过这个,我了解到 category 获取值 none (因为我选择了默认值)并且这种方法似乎也不起作用。

有没有一种方法可以将 category 的值传递给 request_for_choices 以便优化搜索?

最佳答案

自动完成类的 self.request.POST(或 self.request.GET)QueryDict 不会 包含比搜索查询更多的信息,因为它们在创建 View 时传递(因此 self.request.POST.get('category', 'none') 将始终返回 'none')。

所以困难的部分是以某种方式将一个参数(类别)传递给一个完全不同的 View 。这可以通过修改调用自动完成的 javascript 来完成。这意味着,您需要更改 getQuery ( http://django-autocomplete-light.readthedocs.org/en/stable-2.x.x/script.html#override-autocomplete-js-methods ) 以将 category=foo 附加到调用的 url,然后在 choices_for_request 阅读 self.request.GET QueryDict 以获取该值。

另一种方法是将类别参数放入 session 中,然后在 choices_for_request 中读取 session 。例如,在 View 的 __init__ 上,您将执行类似 self.request.session['category'] = 'foo' 的操作,在 choices_for_request 你会得到那个值。

关于django - 如何使用自动完成灯创建依赖下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27528414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com