检查Google App Engine模型中的媒体资源类型

时间:2011-09-20 10:07:44

标签: python google-app-engine

是否可以检测模型属性的类型?

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”是int,float还是字符串?

到目前为止,我已经了解到模型有一个名为“_all_propertie”的方法,它返回一个列表,其中包含我在模型中创建的所有属性。现在我想检查属性类型,以便我可以使用正确的html输入类型自动生成表单,如果我更改属性类型,HTML将自动更改。

这有意义还是我离得太远了?

/迈克尔

3 个答案:

答案 0 :(得分: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提供的线索。

答案 1 :(得分:0)

您不想使用_all_properties,因为这只会将字段名称作为一组字符串提供给您。

相反,您可以使用_properties,它会为字段类型提供字段名称字典。反过来,每个字段类型都称为data_type属性,顾名思义就是它接受的数据类型。

所以:

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

现在data_type包含type <int>

答案 2 :(得分:0)

试试这个:

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

正如尼克约翰逊指出的那样,_properties_all_properties不应该被使用,因为它们是内部的并且可能会发生变化。