2012-03-06 9 views
0

をfloat型に整数プロパティ値を変更して、私のような、既に上記で作成したエンティティ、あります最初はdb.expando + App Engineの+値

class Obj (db.Model): 
    name = db.StringProperty(required=True) 
    rating = db.IntegerProperty(default=0, required=False) 

を設定するモデル次ました:

名を= "test1"、rating = "3"

したがって、評価タイプをfloatに変更する必要があります。

Property rating must be a float

:私は値をfloatにそれを更新するためのOBJモデルのインスタンスを取得することができるよ前に、私はすでに、次のエラーを持っているdb.Expando

class Obj (db.Expando): 
    name = db.StringProperty(required=True) 
    rating = db.FloatProperty(default=0, required=False) 

でこれを達成しようとしていました

最初は、db.Expandoを使用していなかったので、このエラーが発生しました。しかし、db.Expandoを使用した後、私はこのエラーが発生しないと仮定しましたか?それは動的に価値を変えることができるので、私は記事を読むように入力してください。

db.Expandoを初めて使用しているので、私は助けが必要です。誰かが何が起こったのか手がかりを持っていますか?

EDIT

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) 

コード上にした後、同じエラーがポップアップ

Property rating must be a float

SOLUTION 一時的モデル定義評価を除去し、第一フロートする値を更新しdb.FloatPropertyで新しいレイティング定義を追加します

答えて

3

db.Expandoモデルでは、クラス自体で定義されていないプロパティを追加できます。ただし、であるプロパティは、クラス内で明示的に定義されたである必要があります。正しい型である必要があります。

モデル定義からratingを削除するだけで問題が解決します。

+0

右のExpandoセマンティクスは、クラス内で宣言されているプロパティ*にのみ適用されます。レーティングプロパティ定義を削除すると、その値がintとして取得されます。それを浮動小数点に変換したい場合は、それを変更し(e.rating = float(e.rating))、エンティティを書き戻す必要があります。可能であれば、map/reduceライブラリを使用してデータストア全体でこれを行います。 –