2010-07-07 77 views
4

我打電話給我的形式,附加參數的形式方法「驗證:__init__與其他參數

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

我應該怎麼寫形式的初始化方法有內部的身體進入該參數我的表單(例如_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) 

回答

8

validate=True參數是一個關鍵字參數,所以它會在kwargs字典露面。 (只有位置參數出現在args中。)

您可以使用kwargs.pop嘗試獲取kwargs['validate']的值。 如果validatekwargs中的關鍵字,則kwargs.pop('validate')將返回關聯值。它還具有從kwargs字典中刪除'validate'密鑰的好處,這使得它可以撥打__init__

如果validate密鑰不在kwargs中,則返回False

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

如果你不希望它傳遞給__init__之前,從kwargs刪除'validate'鍵,只需更改popget