Django将自定义查询集添加到ListView中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django将自定义查询集添加到ListView中相关的知识,希望对你有一定的参考价值。
我有一个listview,我以一种非常糟糕的标准方式访问,以返回所有元对象。
#url
url(r'^metaobject/$', MetaObjectList.as_view(),name='metaobject_list'),
#ListView
class MetaObjectList(ListView):
model = MetaObject
我最近添加了一个搜索表单,我想扫描我的对象(我有大约5个字段,但我简化了示例)。我想做的是重复使用我的MetaObjectList类视图和我的特定子集。我猜我需要覆盖get_queryset方法,但我不清楚我如何从我的FormView获取查询集到listview。我在formveiw的form_valid函数中使用其他参数调用as_view(),但无法使其工作,无论如何它看起来很hacky。
class SearchView(FormView):
template_name = 'heavy/search.html'
form_class = SearchForm
#success_url = '/thanks/'
def form_valid(self, form):
#build a queryset based on form
searchval=form.cleaned_data['search']
list = MetaObject.objects.filter(val=search)
#where to from here?
我还试着将表单视图中的数据发布到listview,但似乎我需要将表单逻辑重新编写到listview中。
我在python 3.x和django 1.11上。
答案
我发现我觉得比问题评论更优雅:
我的表单现在有效指向列表对象的as_view方法,并传递我想要的请求和查询集
def form_valid(self, form):
#build a queryset based on form
searchval=form.cleaned_data['search']
list = MetaObject.objects.filter(val=search)
return MetaObjectList.as_view()(self.request,list)
这会将ListView命中为我用来更改查询集的帖子
class MetaObjectList(ListView):
model = MetaObject
queryset = MetaObject.objects.prefetch_related('object_type','domain')
def post(self, request, *args, **kwargs):
self.queryset = args[0]
return self.get(request, *args, **kwargs)
唯一明显的变化是使用kwargs让它更清晰一些。否则这似乎运作良好。
以上是关于Django将自定义查询集添加到ListView中的主要内容,如果未能解决你的问题,请参考以下文章
将自定义html添加到django中的choicefield标签