表单不接受其他参数

时间:2010-10-25 23:49:48

标签: python django django-forms kwargs

我试图将另一个参数传递给我的表单,这是一个与ForeignKey关系的对象。但是当我非常确定可以发送其他参数来形成__init__() got an unexpected keyword argument 'parent'(即此处:Simple form not validating)时,为什么表单会返回__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 个答案:

答案 0 :(得分:6)

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%的时间最好只捕获你的except块中的特定异常。这样做有助于避免这样的错误/混乱。另外,我强烈建议为这个自定义构造添加单元测试(或者只是TDDing你的其他代码,但这是一个单独的问题)