db.expando + App Engine +将整数属性值更改为浮点值

时间:2012-03-06 16:00:26

标签: 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):
    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

添加新的评级定义

1 个答案:

答案 0 :(得分:3)

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

只需从模型定义中删除rating即可。