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で作成した方は上記要注意。