2011-03-24 56 views
0

在下面的代碼中,我渲染了人員模型。而不是person()我想使用getattr來使用變量模型名稱。像getattr('person',????) 下面的代碼是我的應用程序引擎代碼的簡化版本。Python getattr,如何解決django模型的構造函數

class person(djangoforms.ModelForm): 

    name = djangoforms.forms.CharField(max_length=24, min_length=2, label = 'Name', required = True) 


class MainPage(webapp.RequestHandler): 

    def get(self): 

    path = os.path.join(os.path.dirname(__file__), 'templates', 'person.html') 
    self.response.out.write(template.render(path, {'form' : person(), 'name' : 'voscausa'})) 
+0

是的,我一直在尋找somtehing這樣。我已經嘗試了'__init__'。它返回一個錯誤:錯誤2011-03-24 14:45:26,290 __init__.py:395]'方法包裝'對象不可迭代 – voscausa 2011-03-24 14:52:05

回答

0

蟒蛇類的構造函數被命名爲__init__,所以使用getattr(YourClass, '__init__')

但是,這可能不是你想要的。見Does python have an equivalent to Java Class.forName()? - 這可能是你的問題的解決方案。

+0

我試圖實現你的答案的第二部分。添加你建議的函數: def get_class(kls): parts = kls.split('。') module =「。」。join(parts [: - 1]) m = __import __(module) for comp部分[1:]: m = getattr(m,comp) return m 但是,這給出了: TypeError:'ModelFormMetaclass'對象不可迭代 – voscausa 2011-03-24 15:03:54

0

我用

get_class('main.person')() 

代替

get_class('main.person') 

得到

self.response.out.write(template.render(path, {'form' : get_class('main.person')(), 'name' : 'voscausa'})) 
0
try: 
    globals()[model_name]() 
except KeyError: 
    print "hey, you forgot to define %s"%model_name 
相關問題