ошибка при отправке в динамической форме в django - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь создать динамическую форму с соответствующими полями, используя следующий код.Но возникает проблема при отправке значения.

Если я ввел пустое значение, то ошибка:

Attribute Error:
'module' object has no attribute ''

в forms.py, и если я ввел значение для зарплаты, то ошибка:

Attribute Error:
'module' object has no attribute '100000'

в forms.py

Вот такие формы.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 голосов
/ 19 марта 2012

Прежде всего, в ваших формах есть ошибка.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')()

что определенно не в порядке.

0 голосов
/ 19 марта 2012

Я предполагаю, что ваш код вида выглядит следующим образом:

c = ContextForm(request.POST, rdict)

Если вы замените его на:

 c = ContextForm(rdict, request.POST)

, он работает просто отлично.Для объяснения прочитайте Обычные аргументы Python против аргументов ключевых слов .

...