我的Google App Engine(Python)装饰器@db.ComputedProperty
存在问题。
我有一个类似的模型:
class Employee(db.Model):
name = db.StringProperty()
date_of_join = db.DateProperty()
@db.ComputedProperty
def date_of_employment(self):
return self.date_of_join
当我尝试将值插入模型时,它会抛出异常:
BadValueError: Unsupported type for property date_of_employment: <type 'datetime.date'>
可以计算属性返回/插入日期值吗?
我找到了解决方案。 Appengine接受计算属性的日期时间,而不是日期对象:
class Employee(db.Model):
name = db.StringProperty()
date_of_join = db.DateProperty()
@db.ComputedProperty
def date_of_employment(self):
return datetime.combine(self.date_of_join, datetime.min.time())
答案 0 :(得分:1)
我说你在GAE中遇到了一个错误,它不允许将datetime.date用作ComputedProperty。
their issue tracker中有一个问题报告,但如果您感到好奇,相关代码就在这里:
但是,用其中一名团队成员的话来说(查看问题报告):
对于datetime.date,当ndb从数据存储中读取ComputedProperty时,它会读取一个具有时间含义的整数。但是,它不知道是否应将其转换为datetime.date或datetime.datetime。当您使用DateProperty或DatetimeProperty时,ndb根据您的属性类型知道要转换的时间。
顺便说一句:我建议转移到新的ndb模块,而不是坚持使用db(但是,这个特殊情况也不会在那里工作)