ReferenceProperty failed to be resolved
app-engine-patchのadmin画面にアクセスするとこういうエラーが出るので
File "/.../admin/templatetags/admin_list.py", line 179, in items_for_result field_val = getattr(result, f.attname) File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 2759, in __get__ raise Error('ReferenceProperty failed to be resolved') Error: ReferenceProperty failed to be resolved
admin.pyをこう書き換えてみたらエラーにならないで表示されるようになった。
class PlayerAdmin(admin.ModelAdmin): # list_display = ( # 'user_pref', 'name', 'desc', # 'type', 'api_key', 'entrypoint') list_display = ('name', )
手動で削除とかしたせいでリファレンスが適切な状態になっていないアイテムがあるんだろうなぁ。ReferencePropertyなのはuser_prefだけなのでこれが正しくない状態になっているんだろう。Data Viewerで眺めてみたけど全部キーが入っていたので「キーが入っているのでそのキーで値を取得しようとしたらもうなくなってた!」ってことなんだろうな。
user_prefがNoneだったらわかるようにいじってみた
class Player(db.Model): def __unicode__(self): prefix = u"DEBUG" + unicode(self.user_pref) + u":" (略)
あー、admin画面と無関係にそもそもself.user_prefを参照できない状態になっている。そりゃそうか。
File "/base/data/home/apps/nishiotools/1.336230617341987572/saichugen/models.py", line 146, in __unicode__ prefix = u"DEBUG" + unicode(self.user_pref) + u":" File "/base/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 2759, in __get__ raise Error('ReferenceProperty failed to be resolved')
じゃあ、参照できなかった時にはkey().name()を表示してもらおう。
def __unicode__(self): try: prefix = u"DEBUG" + unicode(self.user_pref) + u":" except: return u"RESOLVE_ERROR:" + self.key().name()
結果:
DEBUGにしお:Desc@にしお RESOLVE_ERROR:player_1d3ab0f82dbaa65af3b6146316da7da9 DEBUGにしお:Active@にしお RESOLVE_ERROR:player_7e8dc6ac2aff15513637896105ca7cb1 DEBUGにしお:さんぷる@にしお
ふむふむ。該当のアイテムを見てみると名前もdescも空っぽだ。作成された日時を記録するようにしておけばよかったなぁ。たぶん初期の頃に僕がいじっていた時の残骸だと思うけど判断材料がない。まあ、削除するか。