2

私はdateutilrrule関数を使用しています..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)

問題ありません。何が間違っている可能性があります。

4

2 に答える 2

2
(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,)
于 2012-02-09T11:36:10.983 に答える
1

「ルール」+ str(x.play_days)はその名前の変数ではなく文字列を返しますが、ハードコードされた例では一連の変数を渡します

代わりに、おそらく次のようなことをしたいと思うでしょう。

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

そして、byweekday = playdaysのように、括弧なしでplaydaysをbyweekdayに渡します。.....eumiroが彼の回答で言ったように、それは必要ありません:)

于 2012-02-09T11:42:48.987 に答える