使用django_filters时出现too many values to unpack (expected 2)错误如何解决
问题原因
你在实例化PlantFilter时参数传递顺序错误:django-filter的FilterSet类规定第一个入参为请求的GET查询参数,第二个参数才是需要过滤的模型查询集。你当前直接将模型查询集作为第一个参数传入,导致FilterSet内部解析参数时无法完成预期的二元拆包,触发too many values to unpack (expected 2)报错。
解决方法
修改views.py中plants_view的逻辑即可:
- 实例化
PlantFilter时,第一个参数传入request.GET,第二个参数用queryset指定要过滤的Plant数据集 - 将过滤后的结果
myFilter.qs传入模板上下文,代替原本未过滤的查询集,确保页面渲染的是筛选后的内容
修改后的views.py代码如下:
# views.py def plants_view(request): plants = Plant.objects.all() # 修正参数传递 myFilter = PlantFilter(request.GET, queryset=plants) # 传入过滤后的查询集 context = {"plants": myFilter.qs, "myFilter": myFilter} return render(request, 'plants/search_table.html', context)
修改完成后即可正常渲染{{myFilter.form}}表单,筛选功能也会正常生效。
内容的提问来源于stack exchange,提问作者piah
相关产品推荐
相关产品推荐

