1

次の文字列のいずれかの値を持つ変数があるとしましょうtime_period: weekly, monthly, yearly.

...そして、モデルを介してフィルタリングする QuerySet 呼び出しTimeModel:

time_period = 'monthly'
instance = TimeModel.objects.get(time_period=time_period,
                                 year=datetime.now().year,
                                 month=datetime.now().month)

yearこの場合、パラメータとmonthinを渡しましたtime_period == 'monthly'。の場合time_period == yearlyは のみを渡しyear、 の場合time_period == weeklyは 3 つすべて ( yearlymonthly、およびweekly) を渡します。

if3つのステートメントを書く以外に、私が説明したことを行う方法はありますか?

4

1 に答える 1

2

たぶんこれが役立ちます:

from django.db.models import Q

now = datetime.now()
time_periods = {
    'weekly': Q(year=now.year, month=now.month, day=now.week),  # note from OP: now.week is technically invalid; you actually want to use now.isocalendar()[1]
    'monthly': Q(year=now.year, month=now.month),
    'yearly': Q(year=now.year),
}

instance = TimeModel.objects.get(time_periods[time_period], time_period=time_period)
于 2012-08-14T05:10:39.200 に答える