我有一个列表视图,可以通过相当沼泽的标准方式访问它以返回所有元对象。

#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/

10-12 16:57