Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在查询中生成泛型变量_Django - Fatal编程技术网

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(用于有用的链接)