Django视图与变量形式名称

时间:2011-04-20 20:03:25

标签: django forms variables instantiation

我有兴趣根据正在查看的项目对多个表单使用相同的视图。 不知道为什么我不能解决这个问题,可能是“森林树木”问题。

我有一个包含各种项目的应用程序,每个项目都有一个单独的ModelForm。我想使用相同的视图根据传入的项目ID显示每个表单。

我的尝试是在项目中放置一个form_name CharField,其中包含表单的名称 - project.form_name =“project_specific_form”。当调用视图时,传入了项目ID。我尝试用“a = project.form()”替换标准表单调用“a = SomeForm()”以获取该项目的特定表单。那没用。我还尝试了几个版本的字符串concantonation与'exec'一起使用无济于事。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

几乎没有理由使用exec。

在模型上定义一个方法以返回表单。您可以使用globals()函数,该函数返回所有模块级属性的字典:

class Project(model.Model):
    ...

    def get_form(self):
        form = globals()[self.form]
        return form

但我认为更好的方法是定义一个包含所有表单的模块级字典:

project_forms = {
    'foo': FooForm
    'bar': BarForm
}

class Project(models.Model):
    def get_form(self):
        return project_forms[self.form]

请注意,字典的值是实际的表单类,而不是它们的名称。