带额外参数的表单__init__方法
我在调用我的表单时,添加了一个额外的参数 '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']
的值。如果 validate
是 kwargs
里的一个键,那么 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
就可以了。