我试图将一个附加参数传递到我的表单,这是一个对象到外键的关系。但是不知道为什么表单返回 __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,但这是一个单独的问题)
