我正在使用dateutil rrule函数..我从django的数据模型获得工作日。当我把它放在像这样的rrule函数
for x in lgs:
teams = Team.objects.filter(league=x.id)
teamcount = len(teams)
playdays = "rrule." + str(x.play_days)
fixdays = rrule.rrule(rrule.DAILY,byweekday = (playdays),dtstart=startdate,until=endate)
print list(fixdays)
Traceback (most recent call last):
File "<console>", line 5, in <module>
File "/usr/lib/pymodules/python2.7/dateutil/rrule.py", line 345, in __init__
elif not wday.n or freq > MONTHLY:
AttributeError: 'str' object has no attribute 'n'
如果我正常使用该功能,并用
替换第5行 fixdays = rrule.rrule(rrule.DAILY,byweekday = (rrule.SU, rrule.MO),dtstart=startdate,until=endate)
我没问题。可能是错的。
答案 0 :(得分:1)
(rrule.SU, rrule.MO)
是dateutil.rrule.weekday
个对象的列表(元组),而
"rrule." + str(x.play_days)
是一个字符串(没有.n
属性)。
您可以定义字典:
weekday = {'MO': rrule.MO, 'TU': rrule.TU, … }
然后调用它:
playdays = weekday[str(x.play_days)]
另外,请记住
byweekday = (playdays)
与
相同byweekday = playdays
如果要从单个元素定义元组,请添加逗号:
byweekday = (playdays,)
答案 1 :(得分:1)
“RRULE”。 + str(x.play_days)返回一个字符串而不是具有该名称的变量,而在您的硬编码示例中,您传递的是一组变量
你可能想要做这样的事情:
playdays = [getattr(rrule, pd) for pd in x.play_days]
然后在没有括号的情况下将playdays传递到byweekday,例如byweekday = playdays,..... 正如eumiro在答案中所说,没有必要:)