我使用下面的代码从一行中获取所有值。
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.
答案 0 :(得分:2)
你在这段代码中混淆了太多不同的api。
for key in names:
print field.get(key)
您的get()调用无效,因为您实际上正在尝试调用类方法从数据存储区中获取实体 - 请参阅此方法的文档https://developers.google.com/appengine/docs/python/datastore/modelclass#Model_get。
要从字段实例(您的对象)按名称获取属性,您应该使用getattr
,如
for key in names:
print getattr(field,key)
或全部交替使用属性对象的get_value_for_datastore(model_instance)
,该属性对象从properties()调用返回,同时返回属性的名称。
答案 1 :(得分: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