【问题标题】:Form doesn't accept additional parameters表单不接受附加参数
【发布时间】:2010-10-25 23:49:48
【问题描述】:

我试图将一个附加参数传递给我的表单,这是一个对象到 ForeignKey 的关系。但不知道为什么当我很确定可以向表单的__init__ 发送附加参数时表单返回__init__() got an unexpected keyword argument 'parent'(即这里:Simple form not validating)。我错了吗?

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)

【问题讨论】:

    标签: python django django-forms keyword-argument


    【解决方案1】:

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

    【讨论】:

    • 是的,原始代码几乎是一个对象课程,说明为什么使用裸异常是一个坏主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2011-09-13
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多