2011-09-20 58 views
1

是否可以檢測模型屬性的類型?檢查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將自動更改。

這樣做有道理嗎?還是我離得太遠?

/邁克爾

回答

0

你不想使用_all_properties,因爲這只是給你的領域一組字符串的名字。

取而代之,您可以使用_properties,它會爲您提供字段名稱字段類型的字典。每個字段類型又被稱爲data_type的屬性,顧名思義,它是它接受的數據的類型。

所以:

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

現在data_type包含type <int>

+0

丹尼爾,你就是這樣一個巫師。 這正是我一直在尋找的。 非常感謝。 /Michael – BersekerBernhard

+0

@BerserkerBernhard歡迎來到堆棧溢出!爲了使網站更好,以下是一些提示 - 如果答案對您有幫助,您應該注意。您應該也可以將其標記爲已接受。 –

+3

不要使用!它們是內部實施細節,可能隨時更改。您應該調用'.properties()',而這是公共的,記錄在該功能的接口。 –

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])) 

感謝,爲線索丹尼爾·羅斯曼和尼克·約翰遜。

0

試試這個:

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

尼克·約翰遜指出,_properties_all_properties不應該因爲它們是內部和容易改變使用。

相關問題