2

我有这个查询:

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将从请求的帖子中检索到,该帖子是这些值 field1、field2、field3 之一)。

4

1 回答 1

0

那么,这对你有用吗?

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)
于 2013-07-03T14:08:49.370 回答