full_clean()缺少1个必需的位置参数:“ self”

时间:2019-09-04 13:47:35

标签: html django django-forms

我当前正在使用Django 2.2.4版本,并试图创建一个将更新我的模型的编辑按钮。尝试保存更新后的值时,发生TypeError,它指出“ full_clean()缺少1个必需的位置参数:'self'”。我似乎无法从我的代码中检测到任何错误。预先感谢您的帮助。

我的views.py文件

def lab_edit(request, pk, template_name='webapp/lab_edit.html'):
    lab= get_object_or_404(Labs, pk=pk)
    form = LabForm(request.POST or None, instance=Labs)
    if request.method == "POST":
        if form.is_valid():
           form.save()
           return redirect('lab')
        return render(request, template_name, {'form':form})

我的lab_edit.html文件

<div class='container'>
<h2>EDIT LAB</h2>
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
</div>

我的LabForm

 class LabForm(forms.ModelForm):
    class Meta:
          model = Labs
          fields = ('labcode', 'name','administrator')

1 个答案:

答案 0 :(得分:2)

您的LabForm作为模型{em> class 而不是模型对象,而作为instance=。您应该通过传递lab来解决此问题:

def lab_edit(request, pk, template_name='webapp/lab_edit.html'):
    lab = get_object_or_404(Labs, pk=pk)
    if request.method == 'POST':
        form = LabForm(request.POST, instance=lab)
        if form.is_valid():
           form.save()
           return redirect('lab')
    else:
        form = LabForm(instance=lab)
    return render(request, template_name, {'form':form})

通过传递对 class 的引用,您基本上已经在该类上调用了full_clean,因此出现了错误。

请注意,您应该不要使用request.POST or None,因为空的POST请求仍然可以是有效的POST请求。