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中的主要内容,如果未能解决你的问题,请参考以下文章

将自定义按钮添加到 django cms ckeditor

将自定义占位符添加到 django-cms

如何将自定义模型添加到 django celery

将自定义html添加到django中的choicefield标签

Django Allauth - 如何将自定义 CSS 类添加到字段?

Django 将自定义表单错误添加到 form.errors