Django多条件不定项查询
在开发网站过程中遇到一个多条件查询,但并不要求全部填写的情况,如下图,可以只填name,也可以四个全部填好。

极端情况下四个字段都不填写,直接查询,此项目中这里不填默认为ALL,查数据库所有。
如果使用if判断,每种情况写一个filter,需要15个判断语句。很麻烦,不美观,且代码可拓展性差。
解决办法是使用一个字典,将不为空的查询参数塞进去,亲测可行。代码如下:
def advancedSearch(request):
visit_page_num = int(request.GET.get("page", 1))
symbol = request.POST.get("symbol")
species = request.POST.get("species")
experiment = request.POST.get("experiment")
disease = request.POST.get("disease")
# 极端情况下可以都为空的,不定项查询
filter_condition = dict()
if symbol != "ALL":
filter_condition['symbol'] = symbol
if species != "ALL":
filter_condition['species'] = species
if experiment != "ALL":
filter_condition['experiment__contains'] = experiment # 实验 模糊查询 很多个实验里只要包含就查出来
if disease != "ALL":
filter_condition['disease'] = disease
result_set = Genes.objects.filter(**filter_condition)
page, paginator, page_range = page_func(result_set, visit_page_num)
return render(request, 'result.html',
{"driverSet": page, "paginator": paginator,
"visit_page_num": visit_page_num,
"page_range": page_range
})
代码里page_func()是我的分页方法,这里忽略不看就行了。