【问题标题】:How to make a generic variable in a query如何在查询中创建通用变量
【发布时间】:2013-07-03 11:17:05
【问题描述】:

我有这个问题:

search = request.GET['q']
Entries = Entry.objects.filter(Q(field1__icontains=search), Q(field2__icontains=search), Q(field3__icontains=search))

有没有一种优雅的方法可以让这个更干净? (我的意思是让Q(var_field__icontains=search) 之类的东西通用,并且var_field 将从请求的帖子中检索,该帖子是这些值字段1、字段2、字段3 之一)。

【问题讨论】:

  • 我认为它现在看起来还不错。不过你可以试试这个方法:stackoverflow.com/questions/4487054/…
  • @matino 如果Q 对象的数量是固定的,不要理会reduce,它只会让你的代码变得混乱。只需直接使用orand 将三个Qs 组合起来即可。
  • 在 Python 3.x 中,reduce 已从标准内置函数移至 functools 模块。
  • @matino:+1(有用的链接)

标签: django


【解决方案1】:

那么,这对你有用吗?

search = request.GET['q']
fieldnames = ('field1', 'field2', 'field3')

filters = reduce(operator.and_, 
    (Q(**{'{}__icontains'.format(fieldname): search}) 
     for fieldname in fieldnames))

Entries = Entry.objects.filter(filters)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多