Google app engine db.expando+;应用程序引擎&x2B;将整型属性值更改为浮点值

Google app engine db.expando+;应用程序引擎&x2B;将整型属性值更改为浮点值,google-app-engine,datastore,Google App Engine,Datastore,我已经初步建立了以下模型 class Obj (db.Model): name = db.StringProperty(required=True) rating = db.IntegerProperty(default=0, required=False) 已使用上述方法创建了一些实体,例如: name=“test1”,rating=“3” 因此,我需要将评级类型更改为浮动。我试图用db.Expando来实现这一点 class Obj (db.Expando): na

我已经初步建立了以下模型

class Obj (db.Model):
    name = db.StringProperty(required=True)
    rating = db.IntegerProperty(default=0, required=False)
已使用上述方法创建了一些实体,例如:

name=“test1”,rating=“3”

因此,我需要将评级类型更改为浮动。我试图用db.Expando来实现这一点

class Obj (db.Expando):
    name = db.StringProperty(required=True)
    rating = db.FloatProperty(default=0, required=False)
在检索Obj模型的实例以将其更新为浮点值之前,我已经得到以下错误:

属性评级必须为浮动

起初,我遇到了这个错误,因为我没有使用db.Expando。然而,在使用db.Expando之后,我认为这个错误不应该出现?因为它可以在我阅读文章时动态地更改值、类型等

作为db.Expando的新手,我需要帮助。有人知道发生了什么事吗

编辑

for o in Obj.all():
    a = []
    if o.rating:
        o.rating = float(str(restaurant.rating))
    else:
        o.rating = float(0)    
    a.append(restaurant)

db.put(a)
有了上述代码后,会弹出相同的错误

属性评级必须为浮动

解决方案
暂时从模型定义中删除评级,并首先将值更新为float,然后使用db.FloatProperty添加新的评级定义。A
db.Expando
model允许您添加未在类本身中定义的属性;但是,在类中显式定义的任何属性都必须是正确的类型


只需从模型定义中删除
评级
就可以了。

A
db.Expando
模型允许您添加类本身未定义的属性;但是,在类中显式定义的任何属性都必须是正确的类型


只需从模型定义中删除
rating
,您就可以了。

没错,Expando语义只适用于类中未声明的属性。当您删除评级属性定义时,您将得到一个int值;如果你想把它变成一个浮动,你必须改变它(e.rating=float(e.rating))并写回实体。可以使用map/reduce库在整个数据存储中执行此操作。对,Expando语义仅适用于类中未声明的属性。当您删除评级属性定义时,您将得到一个int值;如果你想把它变成一个浮动,你必须改变它(e.rating=float(e.rating))并写回实体。可能使用map/reduce库在整个数据存储中执行此操作。