我有兴趣根据正在查看的项目对多个表单使用相同的视图。 不知道为什么我不能解决这个问题,可能是“森林树木”问题。
我有一个包含各种项目的应用程序,每个项目都有一个单独的ModelForm。我想使用相同的视图根据传入的项目ID显示每个表单。
我的尝试是在项目中放置一个form_name CharField,其中包含表单的名称 - project.form_name =“project_specific_form”。当调用视图时,传入了项目ID。我尝试用“a = project.form()”替换标准表单调用“a = SomeForm()”以获取该项目的特定表单。那没用。我还尝试了几个版本的字符串concantonation与'exec'一起使用无济于事。
有什么建议吗?
答案 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]
请注意,字典的值是实际的表单类,而不是它们的名称。