作为表单向导的一部分,我查看了SO上的大量示例(例如here,here和here)
代码看起来不错(初学者),但它仍然会产生这个错误:
Exception Type: TypeError Exception Value: init() got an unexpected keyword argument 'parent'
相关的views.py提取:
def get_form_kwargs(self, step=None):
kwargs = {}
if self.steps.current == 'assign_child':
kwargs = super(checkout, self).get_form_kwargs(step)
kwargs.update({
'parent': self.request.user,
})
return kwargs
forms.py提取:
class bindBookingItems(ModelForm):
class Meta:
model = BookingItem
fields = ('assignedKids',)
widgets = {
'assignedKids': Select(attrs={'class': 'form-control',}),
}
def __init__(self, *args, **kwargs):
parent = kwargs.pop('parent', None)
super(bindBookingItems, self).__init__(*args, **kwargs)
form.fields['assignedKids'].queryset = getChildren(parent.id)
checkout_bindBookingItemsFormSet = modelformset_factory(
BookingItem,
form = bindBookingItems,
fields=('assignedKids', ),
extra=0, max_num=5, can_delete=False)
我目前的想法是问题出在forms.py中 . 这个论点显然正在被提起,因为它抱怨它 . 但是,我认为我在超级声明之前正确地弹出了kwarg .
我究竟做错了什么?
Updated question with the fact that there's a modelformset in the mix. 遗漏此信息的道歉 . 完全滑倒了我的脑海 .
Updated with traceback:
Traceback:
File "D:\Python27\Lib\site-packages\django\core\handlers\base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Python27\Lib\site-packages\django\views\generic\base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "D:\Python27\Lib\site-packages\django\contrib\formtools\wizard\views.py" in dispatch
237. response = super(WizardView, self).dispatch(request, *args, **kwargs)
File "D:\Python27\Lib\site-packages\django\views\generic\base.py" in dispatch
87. return handler(request, *args, **kwargs)
File "D:\Python27\Lib\site-packages\django\contrib\formtools\wizard\views.py" in get
255. return self.render(self.get_form())
File "D:\Python27\Lib\site-packages\django\contrib\formtools\wizard\views.py" in get_form
419. return form_class(**kwargs)
File "D:\Python27\Lib\site-packages\django\forms\models.py" in __init__
558. super(BaseModelFormSet, self).__init__(**defaults)
Exception Type: TypeError at /checkout/
Exception Value: __init__() got an unexpected keyword argument 'parent'
1 回答
这是一个brilliant example,说明如何正确覆盖
get_form_kwargs
.我很困惑,因为我在S.O.找不到下降的例子 . 至今 .
假设这种形式:
现在已经定义了表单,视图需要使用用户id注入表单: