【问题标题】:full_clean() missing 1 required positional argument: 'self'full_clean() 缺少 1 个必需的位置参数:'self'
【发布时间】:2020-01-07 10:24:03
【问题描述】:

我目前正在使用 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>

我的实验室表格

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

【问题讨论】:

    标签: html django django-forms


    【解决方案1】:

    您的LabForm 得到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 <s>or None</s>,因为空的 POST 请求仍然可以是有效的 POST 请求。

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2023-02-06
      • 2021-09-15
      • 2013-07-06
      • 2022-01-05
      • 2017-03-28
      • 2019-09-26
      • 2017-02-23
      相关资源
      最近更新 更多