带有附加参数的表单的__init__方法

时间:2010-07-07 02:04:18

标签: python django django-forms initialization

我正在调用我的表单,附加参数'validate:

form = MyForm(request.POST, request.FILES, validate=True)

我应该如何编写表单的 init 方法来访问表单体内的这个参数(例如在_clean方法中)?这就是我想出的:

def __init__(self, *args, **kwargs):
    try:
        validate = args['validate']
    except:
        pass           
    if not validate:
        self.validate = False
    elif:
        self.validate = True
    super(MyForm, self).__init__(*args, **kwargs) 

1 个答案:

答案 0 :(得分:9)

validate=True参数是关键字参数,因此它将显示在kwargs dict中。 (只有位置参数显示在args。)

您可以使用kwargs.pop尝试获取kwargs['validate']的值。 如果validatekwargs中的密钥,则kwargs.pop('validate')将返回相关值。它还可以从'validate' dict中删除kwargs密钥,这样就可以调用__init__

如果validate密钥不在kwargs中,则会返回False

def __init__(self, *args, **kwargs):
    self.validate = kwargs.pop('validate',False)
    super(MyForm, self).__init__(*args, **kwargs)

如果您不希望在将'validate'传递给kwargs之前将其移除__init__,只需将pop更改为get