1

以下のコードを使用して、行からすべての値を取得しています。

from google.appengine.ext import db
from python_lib.models import Field

field = Field.all()[0]
names = Field.properties()

for key in names:
  print field.get(key)

しかし、それは次のエラーを与えます、

BadKeyError: Invalid string key name.
4

2 に答える 2

2

このコードでは、あまりにも異なる API を混同しています。

for key in names:
   print field.get(key)

データストアからエンティティをフェッチするために実際にクラス メソッドを呼び出そうとしているため、get() 呼び出しは無効です。このメソッドのドキュメントを参照して ください https://developers.google.com/appengine/docs/python/datastore/モデルクラス#Model_get .

フィールドのインスタンス(オブジェクト)から名前でプロパティを取得するには、使用する必要がありますgetattr

のように

for key in names:
    print getattr(field,key)

get_value_for_datastore(model_instance)または、プロパティの名前とともに properties() 呼び出しから返されるプロパティ オブジェクトをすべて交互に使用します。

于 2013-02-26T02:52:20.930 に答える
0

これは、あなたの望むことですか?

コード:

from google.appengine.ext import db

class Field(db.Model):
  author = db.StringProperty()
  content = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)

a = Field(author="me")
a.put()

編集:

field = Field.all()
for f in field:
    print f.author
    print f.content


props = Field.properties()

print props
for vals in props:
  print vals

出力:

<__main__.Field object at 0xb8c9e4c>
{'content': <google.appengine.ext.db.StringProperty object at 0xb7c0aec>, 'date':     <google.appengine.ext.db.DateTimeProperty object at 0xb7c06cc>, 'author':     <google.appengine.ext.db.StringProperty object at 0xb7c0f6c>}
content
date
author
于 2013-02-24T17:40:58.390 に答える