通用视图中的django动态Q对象

时间:2010-02-05 21:11:48

标签: django django-generic-views django-q

我希望能够将URL中捕获的变量传递给通用视图的Q对象。

我创建了一个通用视图,它作为my_views.view导入,处理分页,排序,过滤等内容...

我需要使用Q对象,因为对于某些页面,需要一些OR过滤器。每个页面也将根据不同的字段(和模型)进行过滤(因此是通用视图)。

示例:

view_customers_info = {
    "queryset" : Customer.all(),
    'qobject': Q(status=stat),
    "extra_context" : {
        "title" : 'View Customers',
    },
    'template_name': 'customer/view.html',
}
urlpatterns = patterns('',
  url(r'^customer/(?P<stat>\w+)/$', my_views.view, view_customers_info),
)

在此示例中,此行抱怨stat不是全局名称:

'qobject': Q(status=stat),

如何将URL中捕获的变量传递给字典view_customers_info?

我不能简单地将Q对象移动到通用视图中,因为其他页面将具有如下所示的Q对象:

'qobject': (Q(type=type) | Q(status=stat)),

感谢。

2 个答案:

答案 0 :(得分:4)

我认为你只能通过使用自定义视图/函数包装通用视图来实现此目的。另见:

http://docs.djangoproject.com/en/1.1/topics/generic-views/#complex-filtering-with-wrapper-functions

答案 1 :(得分:0)

我认为你错过了字段名称周围的引号。

    'qobject': Q(status=("%s" % stat)),