class Employee(db.Model):
firstname = db.StringProperty()
lastname = db.StringProperty()
address1 = db.StringProperty()
timezone = db.FloatProperty() #might be -3.5 (can contain fractions)
class TestClassAttributes(webapp.RequestHandler):
"""
Enumerate attributes of a db.Model class
"""
def get(self):
for item in Employee.properties():
self.response.out.write("<br/>" + item)
#for subitem in item.__dict__:
# self.response.out.write("<br/> --" + subitem)
上面将给出一个变量“item”的属性名称列表。
我对item.__dict__
的看法不起作用,因为item
是str
。
然后,我如何显示每个属性的数据字段类型,例如db.FloatProperty()
为名为timezone
的属性?
GAE = Google App Engine - 但我确信相同的答案适用于任何课程。
谢谢, 尼尔沃尔特斯
答案 0 :(得分:2)
使用“for Employee.properties()。items()”中的名称,属性进行迭代。 property参数是Property实例,您可以使用instanceof。
进行比较答案 1 :(得分:1)
对于像这样的问题,交互式Python shell非常方便。如果您使用它来搜索您的Employee对象,您可能通过反复试验找到了问题的答案。
类似的东西:
>>> from groups.models import Group
>>> Group.properties()
{'avatar': <google.appengine.ext.db.StringProperty object at 0x19f73b0>,
'created_at': <google.appengine.ext.db.DateTimeProperty object at 0x19f7330>,
'description': <google.appengine.ext.db.TextProperty object at 0x19f7210>,
'group_type': <google.appengine.ext.db.StringProperty object at 0x19f73d0>}
由此您知道properties()
对象的db.Model
方法返回dict
将模型的属性名称映射到它们所代表的实际属性对象。
答案 2 :(得分:0)
我添加了同样的问题,前2个答案对我没有帮助。 我无法从类的元数据中获取类型信息 实例属性,这是奇怪的。所以我不得不使用字典。
方法GetType()将以字符串形式返回属性的类型。
以下是我的回答:
class RFolder(db.Model):
def GetPropertyTypeInstance(self, pname):
for name, property in self.properties().items():
if name==pname:
return property
return None
def GetType(self, pname):
t = self.GetPropertyTypeInstance(pname)
return RFolder.__DB_PROPERTY_INFO[type(t)]
__DB_PROPERTY_INFO = {
db.StringProperty :"String",
db.ByteStringProperty :"ByteString",
db.BooleanProperty :"Boolean",
db.IntegerProperty :"Integer",
db.FloatProperty :"Float",
db.DateTimeProperty :"DateTime",
db.DateProperty :"Date",
db.TimeProperty :"Time",
db.ListProperty :"List",
db.StringListProperty :"StringList",
db.ReferenceProperty :"Reference",
db.SelfReferenceProperty :"SelfReference",
db.UserProperty :"User",
db.BlobProperty :"Blob",
db.TextProperty :"Text",
db.CategoryProperty :"Category",
db.LinkProperty :"Link",
db.EmailProperty :"Email",
db.GeoPtProperty :"GeoPt",
db.IMProperty :"IM",
db.PhoneNumberProperty :"PhoneNumber",
db.PostalAddressProperty :"PostalAddress",
db.RatingProperty :"Rating"
}