为什么我的提交按钮呈现一个空白的页面,而它应该包含刚刚更新的数据?

2024-10-05 13:15:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

enter image description here

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

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

enter image description here

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

editclaims.html:

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

views.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})

URL.py:

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

Tags: nameformidemailrequestcontextdescriptionpost
1条回答
网友
1楼 · 发布于 2024-10-05 13:15:27

它可能不能解决你们所有的问题,但作为答案,它会更具可读性


当您从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比手动编写代码更有用

相关问题 更多 >

    热门问题