假设我有一个变量time_period
,其值为以下字符串之一:weekly
,monthly
,yearly
。
...以及通过模型TimeModel
进行QuerySet调用过滤:
time_period = 'monthly'
instance = TimeModel.objects.get(time_period=time_period,
year=datetime.now().year,
month=datetime.now().month)
在这种情况下,我已经传递参数year
和month
,因为time_period == 'monthly'
。如果time_period == yearly
,我希望只传递year
,如果time_period == weekly
,我会传递所有三个(yearly
,monthly
和{{1} in。
有没有办法做我刚才描述的3 weekly
陈述?
答案 0 :(得分: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)