2011-03-24 54 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