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()是我的分页方法,这里忽略不看就行了。
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号