AttributeError: 'FooBar' object has no attribute '_entity'

(注: このエントリーは間違った内容を含んでそうな気配がします。)

Google App Engineでsaveしようとしたときに「AttributeError: 'FooBar' object has no attribute '_entity' 」というエラーがでてしまった件:

モデルで

class FooBar(db.Model):
    short_key = db.StringProperty() # unique key to use in URL

    def __init__(self):
        import utils
        self.short_key = utils.short_key_gen()

などと書いてのだが、間違い。コンストラクタを自分で定義したのに親クラスのコンストラクタを呼び出し忘れている。

    def __init__(self, **kwargs):
        import utils
        db.Model.__init__(self, **kwargs) 
        self.short_key = utils.short_key_gen()

これが正解。ちなみに親コンストラクタの呼び出しがself.short_key = ... より後だとコンストラクタで空っぽのプロパティが作られて上書きされちゃうから意味ないよ。(やったらしい)

さらにそういう壊れたコンストラクタで作ったオブジェクトが入っていたせいか、FooBar.all().fetch(1)でTypeError: __init__() takes exactly 1 non-keyword argument (2 given)というエラーが出た。消してやり直したらうまくいった。うまくいってない!