2012-02-09 70 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

相關問題