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