DateTimeProperty имеет ошибку при установке даты и времени в Google App Engine - PullRequest
2 голосов
/ 11 января 2010

У меня странная ошибка с некоторым кодом Google App Engine, который я пишу.

Моя программа содержит такой код:

import datetime

...

class Action(db.Model):
    visibleDate = db.DateTimeProperty()

...

getActionQuery = Action.gql("WHERE user = :user AND __key__ = :key", user = user, key = self.request.get("key"))
theAction = getActionQuery.get()

....

theAction.visibleDate = datetime.datetime.strptime(self.request.get("visibleDate"), "%Y/%m/%d")

Тем не менее, это приводит к следующей ошибке:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 509, in __call__
    handler.post(*groups)
  File "/Users/redbird/Developer/betterdo-it/main.py", line 132, in post
    theAction.visibleDate = datetime.datetime.strptime(self.request.get("visibleDate"), "%Y/%m/%d"),
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 472, in __set__
    value = self.validate(value)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 2308, in validate
    (self.name, self.data_type.__name__))
BadValueError: Property visibleDate must be a datetime

Есть идеи, почему это происходит? Я проверил это, и я знаю, что мое время приходит, конвертируется правильно, но затем попадает в эту ошибку.

1 Ответ

5 голосов
/ 11 января 2010

Я думаю, что есть что-то, что вы пропустили в своем следе.

Я вижу: datetime.datetime.strptime(self.request.get("visibleDate"), "%Y/%m/%d"),

Обратите внимание на запятую в конце строки.

Эта запятая заставляет эту строку возвращать кортеж с вашей датой внутри. Я предполагаю, что вы случайно добавили запятую, поэтому просто удалите ее, и вы должны правильно назначить дату и время.

Для просмотра:

from datetime import datetime
a = (datetime(2000,1,1),)
assert isinstance(a, tuple)
a = (datetime(2000,1,1))
assert isinstance(a, datetime)
...