Google App Engineでモデルを保存するときに値を変更する

結論を先に書くと、モデルのput()を次のようにオーバーライドすることで、保存時に値を変更することができた。

なお、サンプルコードはKay-Frameworkを使用している。

myapp/models.py

from google.appengine.ext import db
class MyModel(db.Model):
    name = db.StringProperty()

    def put(self):
        self.name = u'foo'
        return db.Model.put(self)

当初、フックを使って値を変更しようと思い、次のようなコードを書いた。

settings.py

USE_DB_HOOK = True #追加

myapp/__init__.py

from kay.utils.db_hook import register_pre_save_hook
from myapp.models import MyModel

def my_pre_save(entity, put_type_id):
    entity.name = u'foo'

register_pre_save_hook(my_pre_save, MyModel)

保存時にフックの関数は呼ばれ、モデルの値を変更している。
しかし、保存された値をみると、変更が反映されていない。
フックで書き換えた値は保存されないようだ。

そこで、モデルのput()をオーバーライドすることにした。

from google.appengine.ext import db
class MyModel(db.Model):
    name = db.StringProperty()

    def put(self):
        self.name = u'foo'
        return db.Model.put(self)

この方法で、変更した値が保存された。

Override get and put methods to enforce business logic」には、保存時にUserPropertyに現在のユーザーを登録するコードがある。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です