我有一個數據庫設置,我希望設置搜索引擎,以便在搜索輸入到不同搜索字段的所有內容時忽略空字段。現在我正在使用AND語句(「,」)和OR語句(「|」)的組合,但我不確定如何編寫它以忽略空的複選框和文本值,但只搜索填充的複選框和文本。這是充滿我的搜索代碼在我的views.py箱子是:Python Django「和/或」在數據庫中搜索
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語句。例如,如果國家是美國,那麼我希望它按州進行搜索,但如果該國是加拿大,我希望它按省進行搜索。我想讓它忽略這兩個都沒有填寫。
現在,例如,如果我選擇開始日期和結束日期,請將該國家設爲美國並選擇victim_1_name,它將只返回所有日期範圍,不管名字。我如何讓它忽略空白字段,同時使用AND連接器填充字段?
而且,像「used_firearm」和「used_taser」是複選框,我閱讀這些領域views.py是:
if request.POST.get('used_teargas', False):
teargas = request.POST['used_teargas']
那是足以讓它忽略複選框,如果它是空的,而通過如果選中了「真」值?
您應該使用合適的搜索引擎進行研究,例如[solr](http://lucene.apache.org/solr/) –
在將列表傳遞給過濾器對象之前,先在列表中構建您的搜索選項,應用設置的選項。 –