0

私のGAEPythonアプリには、さまざまなカスタムフィールドを持つ「ユーザー」と呼ばれる種類があります。最近、アプリが一晩中アクティビティを行わない場合、翌朝ログインしようとするとエラーが発生します。

ログイン中に、データストア内のエンティティのkey_nameであるID(Facebookから)を取得します。

    user = User.get_by_key_name(id_from_facebook)
    logging.debug(user.favorite_color)

返されるエンティティは実際にはGoogleライブラリのクラスであり、フィールド「favorite_color」がないため、これによりエラーが発生します。ただし、データストアから「何か」を取得しているため、オブジェクトの内容を確認しました。

    for key in user.__dict__.keys():
      log.debug("%s: %s" % (key, user.__dict__[key]))

これは、「_ first_name」、「_ last_name」、「_ email」など、私の「ユーザー」の種類ではないキーを示しています。

また、ファイルの先頭ではなく、メソッド内の「myapp.models」からクラスをインポートしようとしましたが、何も変わりませんでした。ただし、GAEで実行されているインスタンスをシャットダウンし、アプリに再度アクセスして新しいインスタンスを開始すると、正常に動作します。

私の唯一の手がかりは、私のアプリがインポートするものとGAEがインポートするものの間に矛盾があると聞いたことですが、それ以外は何もありません。すべてのユーザーを新しい一意のタイプ(「MyUser」など)にコピーする以外にできることはありますか?

編集:

望ましくないクラスは、実際には私のプロジェクトにもあるKayFrameworkの「User」であることがわかりました。ただし、そのクラスはコードのどこにもインポートしません。特に、エラーが発生しているモジュールにはインポートしません。

4

1 に答える 1

0

Userおそらくからクラスをインポートしていますgoogle.appengine.api.users

幸いなことに、インポートは明示的であるため、Pythonを使用するとこの種のことを簡単に追跡できます。モジュールの上部にあるインポート行を確認して、そのオブジェクトがどこから来ているのかを判断してください。

于 2012-07-20T07:34:27.887 に答える