在django中以动态形式提交时收到错误

时间:2012-03-19 07:03:17

标签: python django-forms

我尝试使用相应的字段创建动态表单 以下代码。但在提交价值时遇到问题。

如果我输入空白值,则错误为:

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)

2 个答案:

答案 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')()

绝对不行。