使用 setattr 将字段添加到 Django 表单时失败 class
Failure when using setattr to add field to Django form class
我正在尝试编写使用 Django FormView
和一些独创性来创建一个视图,该视图将允许我从用户那里获取输入,这些输入将被提供给一个函数。我希望代码可以重用,所以我想创建一个视图,该视图能够将目标函数作为参数并自动创建适合该函数的表单。还有更多的管道工作要做,但总体思路是:
class FormViewForFunction(FormView):
template_name = '...'
func = None
def get_form_class(self):
class _FunctionForm(forms.Form):
pass
a = inspect.getargspec(self.func)
for argname in a['args']:
setattr(_FunctionForm, argname, forms.CharField())
return _FunctionForm
我们的想法是,然后您可以在使用 FormViewForFunction.as_view(func=***insert any function you want***)
的 URLConf 中设置一些东西,您最终会看到一个适合为该函数指定参数的表单。我们不用担心表单提交会发生什么。现在我只是坚持让表格正确生成。
使用上面的代码,表单最终没有任何字段!我做错了什么?
表单的字段在初始化时被初始化,你应该覆盖__init__方法,然后将字段追加到self.fields
字典
这应该有效:
class FormViewForFunction(FormView):
template_name = '...'
func = None
def get_form_class(self):
a = inspect.getargspec(self.func)
class _FunctionForm(forms.Form):
def __init__(self, *args, **kwargs):
super(_FunctionForm, self).__init__(*args, **kwargs)
for argname in a['args']:
self.fields[argname] = forms.CharField()
return _FunctionForm
我正在尝试编写使用 Django FormView
和一些独创性来创建一个视图,该视图将允许我从用户那里获取输入,这些输入将被提供给一个函数。我希望代码可以重用,所以我想创建一个视图,该视图能够将目标函数作为参数并自动创建适合该函数的表单。还有更多的管道工作要做,但总体思路是:
class FormViewForFunction(FormView):
template_name = '...'
func = None
def get_form_class(self):
class _FunctionForm(forms.Form):
pass
a = inspect.getargspec(self.func)
for argname in a['args']:
setattr(_FunctionForm, argname, forms.CharField())
return _FunctionForm
我们的想法是,然后您可以在使用 FormViewForFunction.as_view(func=***insert any function you want***)
的 URLConf 中设置一些东西,您最终会看到一个适合为该函数指定参数的表单。我们不用担心表单提交会发生什么。现在我只是坚持让表格正确生成。
使用上面的代码,表单最终没有任何字段!我做错了什么?
表单的字段在初始化时被初始化,你应该覆盖__init__方法,然后将字段追加到self.fields
字典
这应该有效:
class FormViewForFunction(FormView):
template_name = '...'
func = None
def get_form_class(self):
a = inspect.getargspec(self.func)
class _FunctionForm(forms.Form):
def __init__(self, *args, **kwargs):
super(_FunctionForm, self).__init__(*args, **kwargs)
for argname in a['args']:
self.fields[argname] = forms.CharField()
return _FunctionForm