开发者

__init__ method for form with additional arguments

I'm calling my form, with additional parameter 'validate :

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

How should I write form's init method to have access to this parameter inside body of my form (for example in _clean method) ? This is what I came up with :

def __init__(self, *args, **kwargs):
    try:
        validate = args['val开发者_如何学运维idate']
    except:
        pass           
    if not validate:
        self.validate = False
    elif:
        self.validate = True
    super(MyForm, self).__init__(*args, **kwargs) 


The validate=True argument is a keyword argument, so it will show up in the kwargsdict. (Only positional arguments show up in args.)

You can use kwargs.pop to try to get the value of kwargs['validate']. If validate is a key in kwargs, then kwargs.pop('validate') will return the associated value. It also has the nice benefit of removing the 'validate' key from the kwargs dict, which makes it ready for the call to __init__.

If the validate key is not in kwargs, then False is returned.

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

If you do not wish to remove the 'validate' key from kwargs before passing it to __init__, simply change pop to get.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜