1.修改数据的步奏
1.1 单个数据的修改
- 查询:通过get()得到要修改的实体对象
- 改:对对象.属性进行修改
- 保存
b = Book.objects.get(id=1)
b.price = 22
b.save()
1.2 批量数据修改
调用QuerySet的update
b = Book.objects.filter(price__gt=30)
b.update(price=0)
2.制作”更新书籍”的功能
现在需要实现点击更新按钮,就可以更改price和mark_price两个值,然后保存到数据库,刷新页面后就能看见修改后的值。
; 2.1 实现思路
- 点击更新后,通过get方法在地址传入书籍的id,路由试到修改页面。
- 修改页面通过传入的id通过视图层找到数据库中的条目,显示在模板层
- 两个价格通过post方法提交数据到视图层完成数据的更新,然后返回一个302跳转。
2.2 实现过程
2.2.1 视图层的处理,需要分别处理GET和POST请求。
场景均是单条数据的修改,使用get方法来获取数据的对象。
处理GET请求跳转到更新页面,处理POST请求提交数据到数据库。
def update_book(request, book_id):
try:
book = Book.objects.get(id=book_id)
except Exception as e:
print("查找对象发现错误:%s"%(e))
return HttpResponse('查找对象发现错误')
if request.method == 'GET':
return render(request, 'bookstore/update_book.html',locals())
elif request.method == 'POST':
price = request.POST['price']
mark_price = request.POST['mark_price']
book.price = price
book.mark_price = mark_price
book.save()
return HttpResponseRedirect('/bookstore/all_book')
2.2.2 模板制作
模板中,仅对两个价格可以开放修改,其他均添加了disabled
,因为价格要修改,所以要定义个name
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>价格调整title>
head>
<body>
<form action="/bookstore/update_book/{{ book.id}}" method="post">
<p>
书名:<input type="text" value="{{ book.title }}" disabled="disabled">
p>
<p>
出版社:<input type="text" value="{{ book.pub }}" disabled="disabled">
p>
<p>
成本价:<input type="text" value="{{ book.price }}" name="price">
p>
<p>
标价:<input type="text" value="{{ book.mark_price }}" name="mark_price">
p>
<p>
<input type="submit" value="更新">
p>
form>
body>
html>
2.2.3 绑定路由
from . import views
from django.urls import path
urlpatterns = [
path('all_book', views.all_book),
path('update_book/', views.update_book)
]
2.3 实现效果
点击更新后
Original: https://blog.csdn.net/weixin_44254898/article/details/122834701
Author: 银行上班的法学程序猿
Title: ORM修改步骤及更新功能的实现
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/733965/
转载文章受原作者版权保护。转载请注明原作者出处!