栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python django ORM 简单的增删改查案例记录

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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/', views.view02),
    path('page/01/update_news/', views.view02),
    # 删数据
    path('page/02/', views.view03),
    # 加数据
    path('page/03/', views.view04),
    path('page/03/add/', views.view04),

]

访问主页的views方法:

def view01(request):
    all = models.news_inr_test.objects.all()
    return render(request, 'news/news.html', locals())

主页的模板html:

只截取表格部分(调用view方法的值的部分):


    {% for i in all %}
    
    {% endfor %}

id name time price
{{ i.id }} {{ i.title }} {{ i.time }} {{ i.price}} { i.id }}">修改 { i.id }}">删除 { i.id }}">增加
需要注意 view01方法的查询是 all = models.news_inr_test.objects.all() 方法的是一个Queey对象 包含所有数据的对象 所以用for in 一个一个取出来 这里中 a标签中链接 和当前页面拼接了 能访问对应view02方法绑定的url地址

数据更新和数据增加操作:

因为这两个方法的步骤是类似的,注要是最后获取表格提交的数据进行不同的数据库方法。

以数据增加为案例:
urls中所用的链接:
    # 加数据
    path('page/03/', views.view04),这一条是主页点击增加按钮跳转到表单的页面
    path('page/03/add/', 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 %}

id

title

time

price

{% 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的查询内容:

 

 

 

 

 

 补充说明:这些图用的是一位博主的学习记录,十分感谢他的记录。

学习Django_亚古兽超进化的博客-CSDN博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/840050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号