テンプレートでAttributeError: type object 'XXXX' has no attribute '_meta'

82 views
Skip to first unread message

shuitic

unread,
May 2, 2012, 5:29:10 AM5/2/12
to kay-users-ja
Kay framework var 1.1.1で、GQLで取得したモデルにアクセスしようとすると、
AttributeError: type object 'XXXX' has no attribute '_meta'
が開発サーバで発生しました。
現象の内容と、回避方法を、何となく把握したので共有します。尚、本番環境では試していません。

発生するタイミングは、
・TaskQueueでモデルDataを作成する(kay framework未使用)
・こんな感じの簡単なモデル取得関数をviewから呼び出す。(kay framework使用)
def getAllBalnd():
return db.GqlQuery("SELECT * FROM Bland")
・テンプレートで取得したコレクションに、こんな感じでアクセスしようとするとAttributeErrorが発生する
{% for bland in blands %}
<li>{{bland.blandName}}</li>
{% endfor %}
・デバッガーで調べてみると、結果から個々の値を取得するとき(blands.get(0))で発生しているようです。

開発サーバをリスタートして、TaskQueueでData作成フェーズを飛ばして、アプリケーションにアクセスすると、正常に動作しました。
まとめると、kay frameworkを使用しないで、model classをロードした後、kay frameworkをロードすると、ロードし
たmodel classが、使用できなくなるという現象だと思います。
frameworkを初期化するタイミングが、ロードしたクラスに悪影響を与えてしまうのは、不具合に近いものだと思いますので、今後改善されることを
望みます。
個人的には、KindErrorでもはまったので、model classを裏で改変するのは、やめてほしいですね。

Shuichi Asai

shuitic

unread,
May 3, 2012, 12:55:40 AM5/3/12
to kay-users-ja
Globalのグループの方に似たようなスレッドがあって、回避方法も紹介されていました。
http://groups.google.com/group/kay-users/browse_thread/thread/1f410c6814e1897/f2376a7cfbf00fc1?lnk=gst&q=AttributeError+_meta#f2376a7cfbf00fc1
kay/__init__.pyのdb.Model.kind = kindをコメントアウトすれば、回避できるようです。
開発サーバーで試してみましたが、問題なさそうです。

Shuichi Asai
Reply all
Reply to author
Forward
0 new messages