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

mun*_*ntu 4 python django initialization django-forms

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

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

我应该如何编写form的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) 
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 9

validate=True参数是一个关键字参数,所以它会在显示kwargs字典.(只有位置参数出现在args.)

您可以使用kwargs.pop来尝试获取值kwargs['validate'].如果validate是键kwargs,则kwargs.pop('validate')返回相关值.它还具有'validate'kwargsdict 中删除密钥的好处,这使得它可以为调用做好准备__init__.

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

def __init__(self, *args, **kwargs):
    self.validate = kwargs.pop('validate',False)
    super(MyForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

如果您不希望在传递'validate'密钥kwargs之前将其移除__init__,只需更改popget.