def get_generic_filters(filters):
"""
Returns `django.db.models.query.QuerySet` filters based on request query filters
"""
where = [Q()]
# Generates Django query filter
if filters.get('where'):
keys = set(k for k in filters['where'])
if 'in' in keys:
for param in filters['where']['in']:
for key, val in param.iteritems():
field = reduce(lambda a, kv: a.replace(*kv), TICKET_FILTER_MAPPING, key)
where.append(reduce(operator.or_, [Q(**{field: i}) for i in val]))
if 'like' in keys:
like = []
for param in filters['where']['like']:
for key, val in param.iteritems():
field = reduce(lambda a, kv: a.replace(*kv), TICKET_FILTER_MAPPING, key)
field = field + '__icontains'
like.append(Q(**{field: val[0]}))
if len(like):
where.append(reduce(operator.or_, like))
return where
评论列表
文章目录