2015-08-20 34 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