2012-02-09 115 views
0

我使用dateutil RRULE功能时..我从在Django我的数据模型得到了平日。当我把它放在RRULE功能这样AttributeError的:“海峡”对象有没有属性“N”使用dateutil

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' 

,如果我正常使用的功能,并与

fixdays = rrule.rrule(rrule.DAILY,byweekday = (rrule.SU, rrule.MO),dtstart=startdate,until=endate) 

更换5号线我没有得到任何问题。什么可能是错的。

回答

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

“RRULE。” + STR(x.play_days)返回一个字符串不是变量,这个名字,而在你的硬编码例如要传递一组变量

你可能想要做这样的事情,而不是:

playdays = [getattr(rrule, pd) for pd in x.play_days] 

,然后通过playdays周周没有括号,如byweekday = playdays,..... 作为eumiro在他的回答说,这是没有必要的:)

+0

thankyou,让我试试这个,这可能会帮助我解决问题 – debuggerpk 2012-02-11 15:16:05

相关问题