2015-08-20 2 views
0

Когда я использую этот код для настройки виджета моей формы, он не будет проверять. Если я прокомментирую def __init__(..), он отлично работает.Форма DJango с пользовательским __init__ не подтверждается

class CommentForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     self.wysiwyg = kwargs.pop('wysiwyg', False) 

     super(CommentForm, self).__init__() 
     if self.wysiwyg: 
      self.fields['comment_text'].widget = SummernoteWidget() 
     else: 
      self.fields['comment_text'].widget = forms.Textarea(attrs={'rows':2}) 

    comment_text = forms.CharField() 

Я был в состоянии устранить это далеко, и разница между рабочей форме (без инициализации) и инвалиду форма, заключается в следующем:

не действует форма с INIT:

CommentForm bound=False, valid=Unknown, fields=(comment_text) 

действует форма:

CommentForm bound=True, valid=Unknown, fields=(comment_text) 

Связана проблема и как ее исправить?

Спасибо!

+5

один несовершеннолетний Примечание- вы не посылая арг и kwargs в супер – karthikr

+1

Это не второстепенный, это майор. Когда вы не передаете args и kwargs в __init__ из super, форма не будет получать данные POST. – GwynBleidD

ответ

4

Попробуйте это .. может работать

class CommentForm(forms.Form): 
def __init__(self, *args, **kwargs): 
    try: 
     self.wysiwyg = kwargs['wysiwyg'] 
    except KeyError: 
     self.wysiwyg = None 

    super(CommentForm, self).__init__(*args, **kwargs) 
    if self.wysiwyg: 
     self.fields['comment_text'].widget = SummernoteWidget() 
    else: 
     self.fields['comment_text'].widget = forms.Textarea(attrs={'rows':2}) 

comment_text = forms.CharField() 
+0

Попытка вашего кода, я получаю эту ошибку: '__init __() получил неожиданный аргумент ключевого слова 'wysiwyg'' Вот как начинается форма: ' comment_form = CommentForm (request.POST или None, wysiwyg = True) ' – 43Tesseracts

+0

, используя ваш код, если я выложу ключевое слово:' self.wysiwyg = kwargs.pop ('wysiwyg', False) 'Я не получаю никаких ошибок. Я думаю, что это работает! – 43Tesseracts

Смежные вопросы