gpt4 book ai didi

python - ListView中的Django GET表单和上下文修改

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:30 25 4
gpt4 key购买 nike

我有一个从 ListView 派生的通用的基于类的 View 。该 View 应该与 forms.py 中声明的表单交互,以通过 GET 查询过滤objects_list,并修改上下文(如果您对我为什么要这样做感兴趣,检查我的 previous question )。

这意味着我需要在 get_querysetget_context_data 方法中使用表单 (form = MyForm(request.GET)) 的实例。

<小时/>

This solution Not Acceptable ,因为它违反了 this编码原则并假设 get_queryset 总是首先被调用(在 Django 的 future 版本中可能不是这种情况)。

示例:

def get_queryset(self):
self.form = MyForm(self.request.GET)
<小时/>

This solution Not Acceptable ,因为它使用原始 GET 参数,而我们希望充分利用表单自动解析/验证的潜力。

示例:

def get_queryset(self):
a_form_field = self.kwargs["a_form_field"]

这是否可以在不违反任何良好设计原则的情况下做到?

最佳答案

我会重写get方法:

class SearchList(ListView):
def get(self, request, *args, **kwargs):
self.form = MyForm(request.GET)
if self.form.is_valid():
self.queryset = self.form.process_search(self.queryset)

return super(SearchList, self).get(request, *args, **kwargs)

您的表单需要有process_search来保存查询集过滤流程(这样您就可以将搜索登录保留在表单类中)。

之后您可以访问 self.form,并且可以使用 {{ view.form }} 在模板内访问它。

关于python - ListView中的Django GET表单和上下文修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701703/

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