检查Google App Engine模型中的属性类型

1 投票
3 回答
552 浏览
提问于 2025-04-17 02:40

有没有办法检测一个模型属性的类型?

class MODULENAME(db.Model):
    id1 = db.StringProperty()
    id2 = db.StringProperty()
    id3 = db.StringProperty()
    property1 = db.StringProperty()
    property2 = db.StringProperty()
    createdate = db.DateProperty(auto_now_add=True)
    changedate = db.DateProperty(auto_now_add=True)
    isactive = db.BooleanProperty()

我怎么测试“id3”是整数、浮点数还是字符串呢?

到目前为止,我了解到一个模型有一个叫做“_all_propertie”的方法,它会返回我在模型中创建的所有属性的列表。现在我想检查这些属性的类型,这样我就可以自动生成表单,使用正确的HTML输入类型。如果我改变属性的类型,HTML也会自动更新。

这样说有道理吗,还是我想得太远了?

/Michael

3 个回答

0

试试这个:

for name, property in MyModel.properties().items():
    print "Name: " + name + "; Type: " + str(property.data_type)

正如Nick Johnson所提到的,_properties_all_properties不应该使用,因为它们是内部的,可能会发生变化。

0

你不想使用 _all_properties,因为它只是给你字段名称的字符串集合。

相反,你可以使用 _properties,它会给你一个字典,字典里包含字段名称和字段类型的对应关系。每个字段类型都有一个叫 data_type 的属性,顾名思义,这个属性表示它可以接受的数据类型。

所以:

id3 = ModelName._properties['id3']
data_type = id3.data_type

现在 data_type 包含 type <int>

1

这是可以运行的代码:

from google.appengine.ext import db

class MODULENAME(db.Model):
    id1 = db.StringProperty()
    id2 = db.StringProperty()
    id3 = db.DateProperty()
    property1 = db.StringProperty()
    createdate = db.DateProperty(auto_now_add=True)
    changedate = db.DateProperty(auto_now_add=True)
    isactive = db.BooleanProperty()

m = MODULENAME()
plist = m.properties()
for p in plist:
    print "%s: %s" % (p, str(plist[p]))

谢谢你们,Daniel Roseman 和 Nick Johnson,给了我一些提示。

撰写回答