【笔记】Django的ORM之删和改
【笔记】Django的ORM之删和改
一 删除操作
1.视图层
<table border="1">
<thead>
<tr>
<th>序号</th>
<th>ID</th>
<th>出版社名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for publisher in publisher_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ publisher.id }}</td>
<td>{{ publisher.name }}</td>
<td><ahref="/delete_publisher/?id={{ publisher.id }}">删除</a></td>
<td><ahref="/edit_publisher/?id={{ publisher.id }}">编辑</a></td>
</tr>
{% endfor %}
</tbody>
</table>
2. 逻辑层
通过GET方法向服务端传送要删除数据的id;
def delete_publisher(request):
# 通过GET方法获取id
del_id = request.GET.get('id', None)
# 如果取到id,删除该数据并跳转到列表页,否则提示失败
if del_id:
# 通过id拿到药删除的数据对象
del_obj = models.Publisher.objects.get(id=del_id)
del_obj.delete()
return redirect('/publisher_list/')
else:
return HttpResponse('删除失败,该出版社不存在')
二 修改操作
1. 视图层
与上面一样
2. 逻辑层
def edit_publisher(request):
# 如果是POST请求,说明是要更新出版社名称
if request.method == 'POST':
# 获取要更新的id
edit_id = request.POST.get("id", None)
# 获取新的名字
new_name = request.POST.get("publisher_name")
# 通过id获得出版社对象
publisher_obj = models.Publisher.objects.get(id=edit_id)
# 赋值新名字
publisher_obj.name = new_name
# 提交到数据库中执行
publisher_obj.save()
return redirect('/publisher_list/')
edit_id = request.GET.get("id", None)
if edit_id:
publisher_obj = models.Publisher.objects.get(id=edit_id)
return render(request, 'edit_publisher.html', {"publisher":publisher_obj})
else:
return HttpResponse('编辑的出版社不存在!')
三 其他
1. 下拉框
<form action="/edit_book/" method="post">
<input type="text" style="display: none" name="id" value="{{ edit_obj.id }}">
<p>书名:
<input type="text" name="book_title" value="{{ edit_obj.title }}">
</p>
<p>出版社名称:
<select name="publisher">
{% for publisher in all_publisher %}
{% if edit_obj.publisher.id == publisher.id %}
<optionselectedvalue="{{ publisher.id }}">{{ publisher.name }}</option>
{% else %}
<optionvalue="{{ publisher.id }}">{{ publisher.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
2. 对已有数据的数据表添加字段

执行python3 manage.py makemigrations
和python3 manage.py migrate
时,可以通过以下方式找到一个执行窗口,更方便的执行。

【笔记】Django的ORM之删和改的更多相关文章
- python/Django(增、删、改、查)操作
python/Django(增.删.改.查)操作 我们要通过pycharm中的Django模块连接MySQL数据库进行对数据的操作. 一.创建Django项目(每创建一个项目都要进行以下设置) 1.如 ...
- 【笔记】Django的ORM之多对多表的增和删
[笔记]Django的ORM之多对多表的增和删 Django ORM 多对多 一 昨日补充:外键关联 外键在ORM中的关联方式: 与数据表相关的类都放到models.py文件中 class Book ...
- (17)模型层 -ORM之msql 单表的增、删、改、查 及其他操作
单表操作-增.删.改.查 ret=models.User.objects.filter(id=1) #这里的结果是一个queryset对象 ret=modles.User.Objects.filte ...
- Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例
前言 通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也 ...
- django单表操作,增、删、改、查
一.实现:增.删.改.查 1.获取所有数据显示在页面上 model.Classes.object.all(),拿到数据后,渲染给前端;前端通过for循环的方式,取出数据. 目的:通过classes(班 ...
- Dapper学习笔记(3)-增、删、改、查
一.建表 在数据库中建立如下三张表: CREATE TABLE [dbo].[T_User] ( , ) PRIMARY KEY NOT NULL, ) NOT NULL, ) NULL, ) NUL ...
- Android(java)学习笔记186:对ListView等列表组件中数据进行增、删、改操作
1.ListView介绍 解决大量的相似的数据显示问题 采用了MVC模式: M: model (数据模型) V: view (显示的视图) C: controller 控制器 入门案例: acit ...
- Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查
在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...
- Android(java)学习笔记129:对ListView等列表组件中数据进行增、删、改操作
1. ListView介绍 解决大量的相似的数据显示问题 采用了MVC模式: M: model (数据模型) V: view (显示的视图) C: controller 控制器 入门案例: aci ...
随机推荐
- DAY7-面向对象之绑定方法与非绑定方法
一.类中定义的函数分成两大类 一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_met ...
- C# WinForm 关闭登陆窗体后进程还再内存怎么办?
问题:我们通常再制作WinForm应用程序的时候,运行程序的第一个窗口一般是登陆窗口.代码如下: 那么这种方式有一个弊端,这种启动方式,其实就是把登陆窗口设置为主窗体.因此,再登陆后,我们通常是调用H ...
- ActiveMQ (一) 介绍与安装
ActiveMQ是消息中间件的一种 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...
- VS2012新建网站出现(1)的解决方案
1.用记事本打开以下文件: D:\Users\lyn\Documents\IISExpress\config\applicationhost.config 2.删除sites结点下的所有site结点:
- 磨刀——python及相关工具
1.python语言包 1.1去https://www.python.org/,在download栏下载最新版python2或者python3 tips:1.点击下载会很慢,推荐:迅雷,百度云盘下载, ...
- C++获取电脑上连接的多个摄像头名称与编号
#include<iostream>#include "strmif.h"#include <initguid.h>#include<vector&g ...
- 15-struct(构造函数,重载)
必须充分掌握struct的使用,包括其构造和重载函数的写法: #include <iostream> using namespace std; struct node { int x, y ...
- 一个小错误,在for循环中,每次repaint()的时候,记得先把frame涂成白色的。等于擦掉原来的痕迹·。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Animate { int x=1; in ...
- Blockade(Bzoj1123)
Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...
- Locust压力测试使用总结
https://blog.csdn.net/jojoy_tester/article/details/77926470 参考网址 上次做接口压力测试前一直研究使用jmeter,本以为可以拿来使用了, ...