我发现自己陷入了这个问题,并重复谷歌搜索,检查SO,阅读大量的文档并没有帮助我得到正确的答案,所以我希望这不是一个糟糕的问题。
我想要创建的一个实体是在会议期间发生的事件。我给它了属性start_time = ndb.TimeProperty()
。我还有一个属性date = messages.DateProperty()
,我想保持两个离散(换句话说,不使用DateTimeProperty
)。
当用户输入信息以创建活动时,我想为他们在创建时未输入的任何字段指定默认值,并且我想将默认时间设置为午夜,但我似乎无法理解正确格式化,以便服务接受它(当我使用API资源管理器尝试时,持续 503服务不可用响应)。
现在我已经设置了这样的东西(删除了一些不必要的细节):
event_defaults = {...
...
"start_time": 0000,
...
}
然后我尝试循环我的默认值,将它们输入到我将用于.put()
服务器上的信息的字典中。
data = {field.name: getattr(request, field.name) for field in request.all_fields()
for default in event_defaults:
if data[default] in (None, []):
data[default] = event_defaults[default]
setattr(request, default, event_defaults[default])
在日志中,我看到错误来自ProtoRPC方法实现的遇到意外错误:BadValueError(预期时间,得到0)。我也尝试使用time
和datetime
模块,但我必须错误地使用它们,因为我仍然会收到错误。
我想我可以通过使用ndb.StringProperty()
来解决这个问题,而只是处理字符串,但是我觉得我错过了一个机会来了解更多GAE
NDB
1}}和conference.py
工作(所有这些都是针对udacity.com上的项目,所以学习肯定是重点)。
那么,我怎样才能在午夜正确构建默认时间?对不起文字墙。
链接到github上的代码。 models.py
文件包含我遇到问题的代码,而TimeProperty()
包含我与我合作的实体的定义。
更新:我是个假人。我使用StringField()
创建了我的模型类,使用WHILE
创建了相应的消息类,但我从未在预期类型之间进行正确的转换。这就是为什么我似乎永远不会给它正确的东西,但它在代码的不同点预期两个不同的东西。问题已解决。
答案 0 :(得分:1)
TimeProperty需要datetime.time值
import datetime
event_defaults = {...
...
"start_time": datetime.time(),
...
}
文档中的更多信息:https://cloud.google.com/appengine/docs/python/ndb/entity-property-reference#Date_and_Time
答案 1 :(得分:0)
使用datetime()库将其转换为有效的ndb时间属性值
if data['time']:
data['time'] = datetime.strptime(data['time'][:10], "%H:%M").time()
else:
data['time'] = datetime.datetime.now().time()
ps:不要忘记使用您的字段名称更改数据['时间']