你可以构造一个
Q(..)
对象:
Q(price__gte=price_from, price__lte=price_to)
或者你可以
排除
Q(price__gt=price_from, price__lt=price_to)
price_from
或
price_to
None
,从而构造
Q
带夸尔格的对象:
if 'search_filter' in request.GET:
search_params = request.GET.dict()
search_params.pop('search_filter')
price_from = search_params.pop('price_from', None)
price_to = search_params.pop('price_to', None)
q_list = [
Q(('{}__icontains'.format(k), v))
for k, v in search_params.items()
if v is not None
]
price = { 'price__gte': price_from, 'price__lte': price_to }
q_list.append(Q(**{k: int(v) for k, v in price.items() if v is not None}))
# ...