def generate_request_filter(filters):
""" Generates filters from filter query string
"""
where = [Q()]
if 'where' in filters and len(filters['where']):
try:
keys = set(k for k in filters['where'])
if 'in' in keys:
for i in filters['where']['in']:
for key, val in i.iteritems():
where.append(reduce(operator.or_, [Q(**{key: i}) for i in val]))
where = reduce(operator.and_, where)
except (AttributeError, KeyError, FieldError, SyntaxError, ValueError) as ex:
raise BadRequest(str(ex.message))
else:
where = reduce(operator.and_, where)
return where
评论列表
文章目录