将BooleanProperty转换为StringProperty

时间:2014-08-11 03:47:35

标签: google-app-engine google-cloud-datastore

我的模特

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)?

1 个答案:

答案 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`。 (这需要更多的工作,因为你需要让你的模型允许查询布尔值,即使它是一个字符串)。