[Python] querysetのfilter条件をif分岐で変える
やりたかったこと
・画面上のFrom、Toのフォームに日付を入力し、その日付の範囲のデータを取得する。
・id_listに一致するデータを取得する。
上手くいかなかったコード
filterは一部を共通化することはできないのか...
# idリストを作成
id_list = ※省略
# 共通
qs = qs.filter(id=id_list)
# fromパラメータ
if 'from' in params:
qs = qs.filter(date_time__gte=params['from'])
# toパラメータ
if 'to' in params:
toDay = datetime.strptime(params['to'], '%Y-%m-%d')
toDayOneDayLater = toDay + timedelta(days=1)
qs = qs.filter(date_time__lt=toDayOneDayLater)
上手くいったコード
# idリストを作成
id_list = ※省略
if 'from' in params:
# fromパラメータのみ
qs = qs.filter(id=id_list,
date_time__gte=params['from'])
if 'to' in params:
# toパラメータのみ
toDay = datetime.strptime(params['to'], '%Y-%m-%d')
toDayOneDayLater = toDay + timedelta(days=1)
qs = qs.filter(id=id_list,
date_time__lt=toDayOneDayLater)