tetsunosukeのnotebook

tetsunosukeのメモです

gaeogen.pyのバグか?(auto_now_add=True)

GoogleAppsEngineOilを使って、下記のようにしてgaeoge.py にて、scaffoldを作成した。

gaeogen.py scaffold test \
index edit new show destroy  \
"name:StringProperty" \
"created:DateTimeProperty(auto_now_add=True)"  \
"modified:DateTimeProperty(auto_now=True)"

すると、下記のようなModelが生成される。

from google.appengine.ext import db
from gaeo.model import BaseModel

class Test(BaseModel):
    created = db.DateTimeProperty(auto_now_add=True)
    modified = db.DateTimeProperty(auto_now=True)
    name = db.StringProperty()

しかし、Controllerの方でScaffoldの内容がちょっとマズい

    def create(self):
        r = Test(
            name = self.params.get('name', None),
#            created = self.params.get('created', None),
#            modified = self.params.get('modified', None),
        )
        r.put()
        self.redirect('/test')

    def update(self):
        r = Test.get(self.params.get('key'))
        r.name = self.params.get('name', None)
#        r.created = self.params.get('created', None)
#        r.modified = self.params.get('modified', None)
        r.put()
        self.redirect('/test')

上記の部分をコメントアウトしておかないと、scaffoldのフォームからわたって来た値が未入力である場合にNoneが設定されてしまう。これはちょっとジェネレータとしていまいちな挙動じゃないかな。まあ、gaeogen.pyはそこまで判断してみていないし、Scaffoldなんだからそれまで、といえばそれまでなんだけど。scaffoldで作成した方は上記要注意。