__init__ метод для формы с дополнительными аргументами - PullRequest
4 голосов
/ 07 июля 2010

Я вызываю форму с дополнительным параметром '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 голосов
/ 07 июля 2010

Аргумент 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)

Если вы не хотите удалять ключ 'validate' из kwargs перед передачей его в __init__, просто измените pop на get.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...