gpt4 book ai didi

django - __init__() 为试图覆盖 forms.Form 的参数获取了多个值

转载 作者:行者123 更新时间:2023-12-03 20:14:48 25 4
gpt4 key购买 nike

我正在尝试覆盖我的表单以显示我的数据选择,我的问题是当我尝试发送表单时出现此错误 init() got multiple values for argument。

表单.py

class ChangeMemberForm(forms.Form):
coordinator = forms.ModelChoiceField(queryset=None,label="Pesquisadores", widget=forms.Select(attrs={'class':'form-control'}))
def __init__(self,ubc, *args,**kwargs):
super(ChangeMemberForm, self).__init__(*args,**kwargs)
ubc = Ubc.objects.get(id=ubc)
self.fields['coordinator'].queryset = ubc.researchers.all()

View .py

def change_coordinator(request, pk):
template_name = 'ubc/addmember.html'
ubc = Ubc.objects.get(pk=pk)
if request.method == "POST":
form = ChangeMemberForm(request.POST, ubc=ubc.id)
if form.is_valid():
print(form.cleaned_data)
return redirect('accounts:account_detail', pk=request.user.id)
form = ChangeMemberForm(ubc=ubc.id)
context = {
'form': form,
}
return render(request, template_name, context)

最佳答案

您定义参数的顺序是:

def __init__(self<b>, ubc, *args</b>, **kwargs):

而您通过以下方式调用 __init__:

<s>form = ChangeMemberForm(request.POST<b>, ubc=ubc.id</b>)</s>

因此您使用未命名的第一个参数调用它,而第一个参数是 ubc。因此,__init__ 函数接收到 ubc 参数的两个值:request.POSTubc.id,当然这没有意义。

所以你应该将它替换为:

form = ChangeMemberForm(<b>ubc.id,</b> request.POST)

所以这里意味着第一个参数(ubc.id)被重定向到ubc参数,第二个(request.POST) 是 *args 的第一个参数,它是 super().__init__ 调用的参数。

关于django - __init__() 为试图覆盖 forms.Form 的参数获取了多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51066875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com