我的模特
class Sale(db.Model):
#Sale info
s_date = db.DateTimeProperty(auto_now_add=True )
#s_deliverstatus = db.StringProperty(default='False')
s_deliverstatus = db.BooleanProperty(default=False)
s_profit = db.IntegerProperty(default=0)
s_remind = db.BooleanProperty(required=False,default=False)
有数千条记录。
我需要将s_deliverstatus
类型从Bool转换为String,所以我的新模型是
class Sale(db.Model):
#Sale info
s_date = db.DateTimeProperty(auto_now_add=True )
#s_deliverstatus = db.StringProperty(default='False')
s_deliverstatus = db.StringProperty(default='False')
s_profit = db.IntegerProperty(default=0)
s_remind = db.BooleanProperty(required=False,default=False)
因为我希望s_deliverstatus
能够获得3个值:'True','False','Runing'
仅修改销售模型不起作用。它返回旧实体的错误
将旧s_deliverstatus
(BooleanProperty)从False(bool)转换为'False'(字符串),将True(bool)转换为'True'(字符串)并存储在新{{}中的安全方法是什么? 1}}(StringProperty)?
答案 0 :(得分:0)
一种选择是创建自己的属性类型,它同时识别:
class BooleanToStringProperty(db.StringProperty):
def make_value_from_datastore(self, value):
if isinstance(value, bool):
return "True" if value else "False"
return super(self, BooleanToStringProperty).make_value_from_datastore(value)
class Sale(db.Model):
# ...
s_deliverstatus = BooleanToStringProperty(default='False')
基本上这样做是当属性从数据存储区返回时看到一个布尔值,它将它转换为字符串。否则,它只是通过它。 New puts将使用字符串值,但它可以从数据存储区读取布尔值。
重要:如果您想在此属性上查询True / False值,则必须编写两个查询,其中一个值为==' True' {{ 1}} value == True`。 (这需要更多的工作,因为你需要让你的模型允许查询布尔值,即使它是一个字符串)。