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

 

 

 

 

 

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值