データベースをセットアップしており、さまざまな検索フィールドに入力されたすべてのものを検索するときに空のフィールドを無視するように検索エンジンを設定したいと考えています。現在、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)
)
datepicker の範囲と国は必須で、それ以外はすべて OR ステートメントです。たとえば、国が米国の場合は州で検索したいのですが、国がカナダの場合は州で検索したいと思います。どちらも入力されていない場合は、両方を無視してください。
たとえば、現在、開始日と終了日を選択し、国を米国にして、犠牲者 1_名前を選択すると、名前に関係なく、日付範囲内のすべてが返されます。入力されたフィールドに AND コネクタを使用しているときに、空白のフィールドを無視するにはどうすればよいですか?
また、「used_firearm」や「used_taser」などはチェックボックスです。これらのフィールドを読み取るための私の views.py は次のとおりです。
if request.POST.get('used_teargas', False):
teargas = request.POST['used_teargas']
チェックボックスが空の場合はチェックボックスを無視し、チェックされている場合は「True」値を渡すだけで十分ですか?