Django 如何在查询中生成泛型变量
我有一个疑问:Django 如何在查询中生成泛型变量,django,Django,我有一个疑问: search = request.GET['q'] Entries = Entry.objects.filter(Q(field1__icontains=search), Q(field2__icontains=search), Q(field3__icontains=search)) 有没有一种优雅的方法可以让这个更干净?(我的意思是让一些东西像Q(var\u field\uu icontains=search)一样通用,var\u字段将从请求的帖子中检索,该帖子是字段1、字
search = request.GET['q']
Entries = Entry.objects.filter(Q(field1__icontains=search), Q(field2__icontains=search), Q(field3__icontains=search))
有没有一种优雅的方法可以让这个更干净?(我的意思是让一些东西像
Q(var\u field\uu icontains=search)
一样通用,var\u字段
将从请求的帖子中检索,该帖子是字段1、字段2、字段3中的一个值)。那么,这对你有用吗
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)
@雷德诺,我觉得现在看起来还不错。您可以尝试这种方法:@matino如果
Q
对象的数量是固定的,那么就不用麻烦reduce
,它只会使您的代码变得混乱。只需直接使用或
或和
组合三个Q
s。在Python 3.x中,reduce从标准内置函数移到了functools模块。@matino:+1(用于有用的链接)