3

私はピストンを使用して、定期的なカレンダーイベントを処理するアプリケーション用の JSON API を作成しています。

私の API は定期的なイベントに対して機能していましたが、繰り返しを処理するロジックを追加しようとすると、次のエラーが発生し始めました。

記述子「date」には「datetime.datetime」オブジェクトが必要ですが、「unicode」を受け取りました

これが私のものhandlers.pyです:

from piston.handler import BaseHandler
from lessons.models import NewEvent, EachEvent
import calendar
from datetime import datetime, timedelta

class CalendarHandler(BaseHandler):
allowed_methods = ('GET',)
model = EachEvent
fields = ('actualDate', ('manager', ('firstName', 'lastName')))

def next_date(startDate, recurrence, rangeStart):
    sd = startDate
    while (sd < rangeStart):
        print sd;
        sd += datetime.timedelta(recurrence)
    return sd

def read(self, request, uid, month, year):
    qs = NewEvent.objects.filter(manager__boss = request.user).filter(endDate__gte=datetime.date(year, month, 1)).filter(startDate__lte=datetime.date(year, month, calendar.mdays[month]))
    lessonList = []
    qsList = list(qs)
    for l in qsList:
        if l.frequency == 0:
            x = EachLesson()
            x.lessonID = l.id
            x.actualDate = l.startDate
            x.manager = l.manager
            lessonList.append(x)
        else:
            sd = next_date(l.startDate, l.frequency, datetime.date(year, month, 1))
            while (sd <= datetime.date(year, month, calendar.mdays[month])):
                x = EachLesson()
                x.lessonID = l.id
                x.actualDate = sd
                x.manager = l.manager
                lessonList.append(x)
                sd += datetime.timedelta(recurrence)

    return lessonList

frequencyは IntegerField、、、、actualDateおよびstartDateすべてendDateDateField です。

私の URLconf は uid、年、月を受け入れ、これらはすべてパラメータとして CalendarHandler.read メソッドに渡されます。

4

1 に答える 1

10

を使用しfrom datetime import datetime, timedeltaて、datetime モジュールから datetime 型をインポートしました。したがって、呼び出すdatetime.dateときは、日時型のメソッドを呼び出しています。

あなたが望むのは、datetime モジュールの日付型を使用することだと思います。

  1. インポートを に変更しますfrom datetime import datetime, timedelta, date
  2. date(year, month, 1)の代わりに呼び出しますdatetime.date(year, month, 1)
于 2012-06-02T19:19:04.373 に答える