2015-08-20 67 views
0

當我使用此代碼來自定義窗體的窗口小部件時,它將不會驗證。如果我註釋掉def __init__(..)它工作正常。帶自定義__init__的DJango窗體不驗證

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)和無效形式的工作形式的區別,是這樣的:

無效形式INIT

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

有效形式:

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

是受到約束的問題,我該如何解決它?

謝謝!

+5

一個小的注意 - 你是不是送指定參數時,和kwargs進入超級 – karthikr

+1

這不是次要的,這是主要的。如果您沒有將超級用戶的args和kwargs傳入__init__,表單將不會收到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