我有一个列表视图,可以通过相当沼泽的标准方式访问它以返回所有元对象。
#url
url(r'^metaobject/$', MetaObjectList.as_view(),name='metaobject_list'),
#ListView
class MetaObjectList(ListView):
model = MetaObject
我最近添加了一个要扫描对象的搜索表单(我有大约5个字段,但是我简化了示例)。我想做的是将我的MetaObjectList类视图与特定子集一起重用。我猜想我需要重写get_queryset方法,但是我不清楚如何从FormView获取queryset到listview中。我通过在带有附加参数的formveiw的form_valid函数中调用as_view()进行了修改,但还是无法正常工作,而且看起来还是很麻烦。
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上。
最佳答案
我发现我觉得比对这个问题的评论更为优雅:
我的有效表单现在指向列表对象的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使其更加清晰。否则,这似乎工作良好。
关于python - Django将自定义查询集导入ListView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49039468/