[Python] querysetのfilter条件をif分岐で変える

1 min read読了の目安(約800字

やりたかったこと

・画面上の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)