【问题标题】:django dynamic Q objects in generic view通用视图中的 django 动态 Q 对象
【发布时间】:2011-01-13 16:55:28
【问题描述】:

我希望能够将 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)),

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我认为您只能通过使用自定义视图/功能包装通用视图来做到这一点。另见此处:

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

    【讨论】:

    • 谢谢。这完全有道理,我从来没有想过要做这样的事情。
    【解决方案2】:

    我认为您只是缺少字段名称周围的引号。

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

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 2012-12-16
      • 2015-04-13
      • 2021-09-18
      • 2013-05-30
      • 1970-01-01
      • 2018-08-18
      • 2015-12-10
      • 2017-10-02
      相关资源
      最近更新 更多