带额外参数的表单__init__方法

4 投票
1 回答
3156 浏览
提问于 2025-04-16 00:54

我在调用我的表单时,添加了一个额外的参数 '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 个回答

9

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

你可以用 kwargs.pop 来获取 kwargs['validate'] 的值。如果 validatekwargs 里的一个键,那么 kwargs.pop('validate') 就会返回它对应的值。同时,它还有一个好处,就是会把 'validate' 这个键从 kwargs 字典中删除,这样就可以为调用 __init__ 做准备了。

如果 validate 这个键不在 kwargs 里,那么就会返回 False

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

如果你不想在传递 kwargs__init__ 之前删除 'validate' 这个键,只需把 pop 改成 get 就可以了。

撰写回答