我设置了一个数据库,我希望设置搜索引擎,以便在搜索输入到不同搜索字段中的所有内容时忽略空字段。现在我正在使用 AND 语句(“,”)和 OR 语句(“|”)的组合,但我不确定如何编写它来忽略空复选框和文本值,但只搜索填充的复选框和文本我的views.py中的搜索代码是:
incidents = Incident.objects.filter(
Q(datepicker__range=[date_start, date_end]),
Q(country__contains=country),
Q(city__contains=city)
| Q(state__contains=state)
| Q(province__contains=province)
| Q(used_firearm__contains=firearm)
| Q(used_taser__contains=taser)
| Q(used_teargas__contains=teargas)
| Q(victim_1_name__contains=victim_name)
| Q(victim_1_ethnicity__contains=victim_ethnicity)
| Q(victim_1_age__contains=victim_age)
| Q(victim_1_sex__contains=victim_sex)
| Q(victim_1_status__contains=victim_status)
| Q(victim_1_armed__contains=victim_armed)
)
日期选择器范围和国家是必需的,然后其他所有内容都是 OR 语句。例如,如果国家是美国,那么我希望它按州搜索,但如果国家是加拿大,我希望它按省搜索。如果两者都没有填写,我希望它忽略两者。
现在,例如,如果我选择开始日期和结束日期,将国家设为 USA 并选择受害者_1_name,它将只返回日期范围内的所有内容,而不管名称如何。在对填写的字段使用 AND 连接器时,如何让它忽略空白字段?
此外,诸如“used_firearm”和“used_taser”之类的东西是复选框,我用于阅读这些字段的views.py是:
if request.POST.get('used_teargas', False):
teargas = request.POST['used_teargas']
如果它是空的,它是否足以让它忽略复选框,而如果它被选中则传递一个“True”值?