Appengineでは、私はプロパティ値を自動的に計算し、オブジェクトと共に保存しようとしています。pythonアプリケーションエンジンモデルでput()メソッドを上書きする方法はありますか?
私はクラスRectangleを持っており、幅、高さ、面積を持っています。明らかに、この領域は幅と高さの関数ですが、ソートに使用したいので、これをプロパティにします。だから私はそうのような矩形を格納する際に面積をこっそりPUT()関数を変更しよう:
class Rectangle(db.Model):
width = db.IntegerProperty()
height = db.IntegerProperty()
area = db.IntegerProperty()
def put(self, **kwargs):
self.area = self.width * self.height
super(Rectangle, self).put(**kwargs)
私は直接エリアオブジェクトにput()
を呼び出すとき、これは動作します:
re1 = Rectangle(width=10, height=10)
re1.put()
print re1.area # >> 10
しかしとき私はdb.put()
を使います(例えば、一度にたくさんのものを保存するなど)、これが壊れます。
re2 = Rectangle(width=5, height=5)
db.put(re2)
print re2.area # >> None
計算された値を「入れる」適切な方法は何ですか?
データベースからアイテムを取得するとどうなりますか?計算された面積ですか? – rocksportrocker
データストアをチェックしたところ、データストアは同じです。最初の矩形は '10'、2番目の矩形は' None'です。 – Paul
私は 'db.put()'があなたのオブジェクトの個々の 'put()'メソッドを決して呼び出さないと思っています。おそらくデータベースのプロパティを調べて、一括挿入ステートメントを作成します。 'put'ではなく' __init__'で領域を設定すると、どうなりますか? – larsks