1

私はPHPの世界から来て、Pythonに比較的慣れていません。PHP では、User などのデータベースからオブジェクトに対応する行を定期的にフェッチし、ビュー ページにユーザー オブジェクトを渡す前にプロパティを追加します。たとえば、ユーザーにはプロパティ email、name、および id があります。データベースから 5 人のユーザーを取得し、for ループで動的プロパティをユーザーに割り当てます。

これは、for ループ内の Python/Google App Engine データストア モデルでは機能しないようです (Python よりもデータストア モデルを使用する必要があると思います)。これは for ループ内で機能します (つまり、for ループ内で user.image を参照できますが、for ループが終了すると、すべてのオブジェクトに新しい属性イメージがもうないように見えます。

コード例を次に示します。

# Model
Class User(ndb.Model):
   email = ndb.StringProperty()
   name = ndb.StringProperty()


# And then a function that returns a list of users
users = User.get_users()

user_list = []
# For loop 
for user in user:
   # For example, get image
   user.image = Image.get_image(user.key)
   user_list.append(user)

   # If I print or log this user in the for loop, I see a result
   logging.info(user.image) # WORKS!

for ul in user_list:
   print ul.image # Results in None/ATTR Error

なぜこれが起こっているのか、そしてこの目標を達成する方法を誰かに説明してもらえますか?

フォームを検索しましたが、何も見つかりませんでした。

4

1 に答える 1

0

Expando Modelを使ってみる

事前にプロパティを宣言したくない場合があります。特別なモデル サブクラスである Expando は、エンティティの動作を変更して、割り当てられた属性 (アンダースコアで始まらない限り) がデータストアに保存されるようにします。

于 2013-02-09T21:22:14.213 に答える