Skip to main content
 首页 » 编程设计

python之表单不接受附加参数

2025年05月04日17zengkefu

我试图将一个附加参数传递到我的表单,这是一个对象到外键的关系。但是不知道为什么表单返回 __init__() got an unexpected keyword argument 'parent' 当我很确定可以发送额外的参数到表单的 __init__ (即这里: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) 

请您参考如下方法:

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