Django将自定义查询集放入ListView
Posted
技术标签:
【中文标题】Django将自定义查询集放入ListView【英文标题】:Django get custom queryset into ListView 【发布时间】:2018-02-28 22:11:58 【问题描述】:我有一个列表视图,我以非常标准的方式访问它以返回所有元对象。
#url
url(r'^metaobject/$', MetaObjectList.as_view(),name='metaobject_list'),
#ListView
class MetaObjectList(ListView):
model = MetaObject
我最近添加了一个搜索表单,我想扫描我的对象(我有大约 5 个字段,但我已经简化了示例)。我想做的是将我的 MetaObjectList 类视图与我的特定子集一起使用。我猜我需要重写 get_queryset 方法,但我不清楚如何将查询集从我的 FormView 获取到列表视图中。我在 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?
我还考虑尝试将表单视图中的数据发布到列表视图,但这似乎需要将表单逻辑重新写入列表视图。
我使用的是 python 3.x 和 django 1.11。
【问题讨论】:
我想这会对你有所帮助***.com/questions/18664182/… 【参考方案1】:我发现我觉得比对问题的评论更优雅:
我的有效表单现在指向列表对象的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ListView 和 AlertDialog 中设置自定义字体?