2011-09-20 6 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_typetype <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])) 

덕분에, 단서 다니엘 Roseman과 닉 존슨.

0

이 시도 : 닉 존슨이 지적들이 변경 내부 및 책임이기 때문에

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

, _properties_all_properties는 사용할 수 없습니다.