python django ORM 的增删改查案例记录
在学习中摸索简单的ORM和模板层html的数据交互中的增删改查功能。
主要和网络教程不同的是我查询用的是fileter去对象,再在html中用for in给对象实例化,再获取对应属性的值,而b站的教程用的是get获取单条数据,能直接.属性取值,两种方法都是能实现效果的,但需要注意用get的方法更新数据最后要用save方法保存,用filter的update就不用save了。
下面开始举例子:
先看html页面:
urls层
-
from django.contrib import admin
-
from django.urls import path, re_path,include
-
from . import views
-
-
urlpatterns = [
-
# 查数据
-
path('page/01', views.view01),
-
# 改数据
-
path('page/01/<int:page>', views.view02),
-
path('page/01/update_news/<int:page>', views.view02),
-
# 删数据
-
path('page/02/<int:page>', views.view03),
-
# 加数据
-
path('page/03/<int:page>', views.view04),
-
path('page/03/add/<int:page>', views.view04),
-
-
]
访问主页的views方法:
-
def view01(request):
-
all = models.news_inr_test.objects.all()
-
return render(request, 'news/news.html', locals())
主页的模板html:
-
只截取表格部分(调用view方法的值的部分):
-
<table border="1">
-
<tr>
-
<th>id</th>
-
<th>name</th>
-
<th>time</th>
-
<th>price</th>
-
</tr>
-
-
{% for i in all %}
-
<tr>
-
<td>{{ i.id }}</td>
-
<td>{{ i.title }}</td>
-
<td>{{ i.time }}</td>
-
<td>{{ i.price}}</td>
-
<td>
-
<a href="01/{{ i.id }}">修改</a>
-
<a href="02/{{ i.id }}">删除</a>
-
<a href="03/{{ i.id }}">增加</a>
-
</td>
-
</tr>
-
{% endfor %}
-
-
</table>
-
-
需要注意 view01方法的查询是 all = models.news_inr_test.objects.all()
-
方法的是一个Queey对象 包含所有数据的对象 所以用for in 一个一个取出来
-
-
这里中 a标签中链接 和当前页面拼接了 能访问对应view02方法绑定的url地址
数据更新和数据增加操作:
因为这两个方法的步骤是类似的,注要是最后获取表格提交的数据进行不同的数据库方法。
-
以数据增加为案例:
-
urls中所用的链接:
-
# 加数据
-
path('page/03/<int:page>', views.view04),这一条是主页点击增加按钮跳转到表单的页面
-
path('page/03/add/<int:page>', views.view04),这一条是点击后,模板层表单页面的方法
-
-
views中的方法:
-
def view04(request,page):
-
son_page = models.news_inr_test.objects.filter(id=page)
-
-
all = models.news_inr_test.objects.all()
-
这里对 all这行补充一下,如果你直接重定向回主页,这里可以不加,但如果通过给新页面模板的画就要加油,不然的话主页没有all中数据库数据。
-
-
if request.method=='GET':
-
return render(request, 'news/add.html', locals())
-
elif request.method=='POST':
-
update_id = request.POST['id']
-
update_title = request.POST['title']
-
update_time=request.POST['time']
-
update_price=request.POST['price']
-
models.news_inr_test.objects.create(id=update_id,title=update_title,time=update_time,price=update_price)
-
return HttpResponseRedirect('/news/page/01')
-
-
add.html(模板层):
-
{% for son_page1 in son_page %}
-
<form action="add/{{ son_page1.id }}" method='POST'>
-
<p>id <input type="text" name="id" value=""></p>
-
<p>title <input type="text" name="title" value=""></p>
-
<p>time <input type="text" name='time' value=""></p>
-
<p>price <input type="text" name='price' value=""></p>
-
<input type="submit" value="更新">
-
</form>
-
{% endfor %}
-
-
操作过程和方法逻辑分析:
-
主页点击增加按钮,因为是GET请求,被view 中 if判定去add.html模板的页面,注意看这个html表单中aiton链接,绑定的也是view04方法,只不过因为是表格提交(POST),所以不用占用GET,只走post路线。
-
只有post表单中action产生post请求,响应view04中post方法,view中通过request.POST获取页面提交的数据,之后用对应ORM方法增加或者更新数据
-
-
增加数据:
-
models.news_inr_test.objects.create(id=update_id,title=update_title,time=update_time,price=update_price)
-
修改数据:
-
son_page.update(time=update_time)
-
son_page.update(price=update_price)
-
顺便贴一个删除数据的:
-
son_page.delete()
-
-
最后,通过重定向回主页(最方便):
-
return HttpResponseRedirect('/news/page/01')
删除数据操作就不单独写了,我的方法也是用filter通过页面给的page当id,绑定后生成对象,再直接.delete()删除就行了。
补充一下get和filter的查询内容:
补充说明:这些图用的是一位博主的学习记录,十分感谢他的记录。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibeihe
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22