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

Python 为什么我的提交按钮呈现一个空白的页面,而它应该包含刚刚更新的数据?,python,django,Python,Django,我正在尝试使用HTML表单更新数据库的值 当我单击编辑时,它会将我带到编辑上面的值的窗口 但是,当我单击submit按钮时,它返回一个数据库,但没有其他值 是否有人可以帮助我理解我做错了什么,并为我指出正确的文档(如果有) editclaims.html: <div class="arrange2"> <h1>Edit Claim Form - #{{claims.id}} </h1> </div>

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

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

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

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

editclaims.html:

<div class="arrange2">
        <h1>Edit Claim Form - #{{claims.id}} </h1>
    </div>
    <form method="POST" action="/update/{{claims.id}}">
        {% csrf_token %}
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'),
]
urlpatterns=[
路径('existingclaims/',views.viewclaims,name='existingclaims'),
路径('editclaims/',views.editclaims,name='editclaims'),
路径('update/',views.updateclaims,name='updateclaims'),
]

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


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

您必须从数据库中获取原始的
声明
,并更新此对象中的值并保存它-然后它将使用原始的
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
比手动编写代码更有用。

什么是
initialize\u context()
initialize\u context()
指的是Microsoft Graph API。它检查会话中的用户并检查会话中的任何错误。您不需要同时使用
editclaims
updateclaims
,只需要其中一个。您可以在
form.save()之前运行
claims=
因此您可以获得旧数据。正确的文档是django官方文档-您应该在开始编码之前启动它。如果您使用任何其他模块,那么第一个文档应该是本模块的正式文档。官方文档通常有示例、教程或其他信息。如果使用Microsoft Graph,如何实现ModelForm?我从未使用过
Microsoft Graph
-如果它不是本地数据库,则应使用普通
表单
,从头开始编写所有代码。
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})