Форма не принимает дополнительные параметры - PullRequest
1 голос
/ 26 октября 2010

Я пытался передать в форму дополнительный параметр, который относится к объекту ForeignKey. Но не знаю, почему форма возвращает __init__() got an unexpected keyword argument 'parent', когда я почти уверен, что можно отправить дополнительные параметры для __init__ формы (т.е. здесь: Простая форма не проверяет ) Я не прав?

def add_video(request):
    parent = ParentObject.objects.all()[0]
    if request.method == 'POST':
        form = VideoForm(data=request.POST, parent=parent)
        if form.is_valid():
            form.save()            
            next = reverse('manage_playforward',)
            return HttpResponseRedirect(next)
    else:
        form = VideoForm()

class VideoForm(forms.ModelForm):       

    def __init__(self, *args, **kwargs):
        try:
            self.parent = kwargs.pop['parent']
            logging.debug(self.parent)
        except:
            pass    
        super(VideoForm, self).__init__(*args, **kwargs)

1 Ответ

6 голосов
/ 26 октября 2010

kwargs.pop['parent'] выдает TypeError: 'builtin_function_or_method' object is unsubscriptable, потому что вы пытаетесь выполнить поиск ключа для метода функции ({}.pop). Эта ошибка затем поглощается вашим обработчиком исключений.

Для этого нужно сделать kwargs.pop('parent', None). В вашем случае:

class VideoForm(forms.ModelForm):       
    def __init__(self, *args, **kwargs):
        self.parent = kwargs.pop('parent', None)
        super(VideoForm, self).__init__(*args, **kwargs)

Как примечание, в 99% случаев лучше всего ловить только определенные исключения в ваших, кроме блоков. Это поможет избежать ошибок / путаницы, как это. Кроме того, я настоятельно рекомендую добавить модульные тесты для этой пользовательской конструкции (или просто добавить другой код в TDD, но это отдельная проблема)

...