Python getattr,如何访问Django模型的构造函数

0 投票
3 回答
1421 浏览
提问于 2025-04-16 14:20

在下面的代码中,我展示了一个人的模型。现在我想用一个叫做getattr的东西来代替person(),这样我就可以使用一个变量作为模型的名字。就像这样:getattr('person', ???? )。下面的代码是我应用引擎代码的简化版本。

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'}))

3 个回答

0

在编程中,我们常常会遇到一些问题,特别是在使用某些工具或库的时候。有时候,错误信息可能会让人感到困惑,不知道该怎么解决。

比如,有人可能在使用某个库时,遇到了一个错误提示。这个提示可能是说某个东西没有找到,或者某个功能没有被正确调用。对于刚开始学习编程的人来说,这些信息可能听起来很复杂。

其实,解决这些问题的关键在于仔细阅读错误信息,理解它的意思。通常,错误信息会告诉你出错的地方,或者是你需要检查的内容。通过这些提示,你可以一步步找到问题所在,进而修复它。

另外,查阅相关的文档或者在网上搜索类似的问题,也能帮助你更快地找到解决方案。编程的过程中,遇到问题是很正常的,重要的是要保持耐心,逐步解决。

try:
    globals()[model_name]()
except KeyError:
    print "hey, you forgot to define %s"%model_name
0

我用了

get_class('main.person')()

而不是

get_class('main.person')

来获取

self.response.out.write(template.render(path, {'form' : get_class('main.person')(), 'name' : 'voscausa'}))
0

Python类的构造函数叫做 __init__,所以可以用 getattr(YourClass, '__init__') 来获取它。

不过,这可能不是你真正想要的。可以看看这个链接 Python有没有类似Java的Class.forName()? - 这可能是你问题的解决办法。

撰写回答