我尝试使用相应的字段创建动态表单 以下代码。但在提交价值时遇到问题。
如果我输入空白值,则错误为:
Attribute Error:
'module' object has no attribute ''
form.py中的, 如果我输入工资值,那么错误是:
Attribute Error:
'module' object has no attribute '100000'
在forms.py
中这是forms.py
from django import forms
class ContextForm(forms.Form):
def __init__(self. rdict, *args, **kwargs):
super(ContextForm, self).__init__(*args, **kwargs)
for key in rdict.keys():
self.fields['%s' % str(key)] = getattr(forms,rdict.get(key))()
rdict = {'address': 'CharField','phone': 'CharField', 'Salary': 'IntegerField','first name': 'CharField','last name':'CharField'}
c = ContextForm(rdict)
答案 0 :(得分:0)
我假设您的视图代码如下所示:
c = ContextForm(request.POST, rdict)
如果将其替换为:
c = ContextForm(rdict, request.POST)
它运作得很好。 有关解释,请阅读Python normal arguments vs. keyword arguments。
答案 1 :(得分:0)
首先,您的forms.py中有一个错误:
$ python forms.py
File "forms.py", line 5
def __init__(self. rdict, *args, **kwargs):
^
SyntaxError: invalid syntax
然后,我相信问题如下。也许,您正在尝试使用以下代码创建表单:
new_form = ContextForm(request.POST, something_else)
因此,如果您的request.POST
是这样的话:
{'some_field': '100000'}
然后在这一行:
self.fields['%s' % str(key)] = getattr(forms,rdict.get(key))()
forms
是一个模块对象,key
是'some_field'
,因此rdict.get(key)
是'100000'
和
getattr(forms,rdict.get(key))()
相当于:
getattr(forms, '100000')()
绝对不行。