首页 > 解决方案 > 为什么我的提交按钮在它应该包含刚刚更新的数据时呈现一个空白页面?

问题描述

我正在尝试使用 HTML 表单更新我的数据库的值。

在此处输入图像描述

当我单击编辑时,它会将我带到编辑上面的值。

但是,当我单击提交按钮时,它会返回一个数据库,但没有其他值。

在此处输入图像描述

有没有人可以帮助我理解我做错了什么并指出我正确的文档(如果有的话)

编辑声明.html:

<div class="arrange2">
        <h1>Edit Claim Form - #{{claims.id}} </h1>
    </div>
    <form method="POST" action="/update/{{claims.id}}">
        {% csrf_token %}

视图.py:

def editclaims(request,id):
  context = initialize_context(request)
  user = context['user']
  claims = SaveClaimForm.objects.get(id=id)

  if request.method == 'POST':
    name = request.POST['name']
    email = request.POST['email']
    claim = request.POST['claim']
    claimtype = request.POST.get('claimtype')
    description = request.POST['description']
    receipt = request.FILES['receipt']
    cheque = request.POST.get('Cheque')
    form = SaveClaimForm(name=name, email=email, claim=claim, claimtype=claimtype, description=description, receipt=receipt, cheque=cheque)
    form.save()
  
  return render(request, "Login/editclaims.html", {'claims':claims, 'user':user})

网址.py:

urlpatterns = [
    path('existingclaims/', views.viewclaims, name='existingclaims'),
    path('editclaims/<int:id>', views.editclaims, name='editclaims'),
    path('update/<int:id>', views.updateclaims, name='updateclaims'),
]

标签: pythondjango

解决方案


它可能无法解决您所有的问题,但它作为答案将更具可读性。


当您从 HTML 获取数据时,您将创建新对象SaveClaimForm,它将具有新对象,ID并且您将在两行中拥有相同的对象。

您必须从数据库中获取原始Claim值并更新此对象中的值并保存它 - 然后它将与原始值一起保存,ID并且您在数据库中只有一个“对象”

def editclaims(request,id):
    context = initialize_context(request)
    user = context['user']

    # get original object     
    claims = SaveClaimForm.objects.get(id=id)

    if request.method == 'POST':

        # update original object
        claims.name = request.POST['name']
        claims.email = request.POST['email']
        claims.claim = request.POST['claim']
        claims.claimtype = request.POST.get('claimtype')
        claims.description = request.POST['description']
        claims.receipt = request.FILES['receipt']
        claims.cheque = request.POST.get('Cheque')

        # save it with original `ID`
        claims.save()
      
    return render(request, "Login/editclaims.html", {'claims':claims, 'user':user})

顺便提一句:

Django有特殊的类ModelForm来在 HTML 中创建表单。它还可能具有检查 HTML 中的数据是否正确的方法 - 即。name@domain.com如果字段不为空,如果电子邮件构造正确ModelForm


推荐阅读