ORM 增删改查
一、字段增加
#终端输入
1.model里添加字段,
2.执行迁移命令。
3.终端里输入默认值,继续执行迁移命令。
#允许为空
再null=true,终端不需要输入默认值
#设置默认值
defalult=‘xxxx‘
二、字段修改
1.直接修改代码,
2,执行迁移两条命令。
三、字段删
1.对应字段注释;
2.执行迁移两条命令;
警告:执行完毕字段对应数据删除,不要轻易操作
a.迁移命令执行前,注意查看修改代码。
b.离开计算机锁屏。
数据增删改查
1.查数据
a. code
res=models.User.objects.filter(username=username)
#<querySet[<User:User object>] >类型
#可以索引,切片操作,不能负数。
#不推荐索引,推荐first()user_obj=models.User.objects.filter(username=username).first()
pw=user_obj.password#filter(username=username,password=password)
#关系是and。相当于where#------------全部查找-------------
#方法一
data=models.user.objects.filter()#方式二
models.user.objects.all()
b. html 展示
补全,for+tag
<table class="table table-bordered"><thead><tr><th>#</th><th>id</th><th>书名</th><th>出版社名称</th><th>操作</th></tr></thead><tbody>{% for i in all_book %}<tr><td>{{ forloop.counter }}</td><td>{{ i.id }}</td><td>{{ i.title }}</td><td>{{ i.publisher.name }}</td><td><a class="btn btn-danger" href="/delete_book/?id={{ i.id }}">删除</a><a class="btn btn-info" href="/edit_book/?id={{ i.id }}">编辑</a></td></tr>{% endfor %}</tbody>
</table>
2.增数据
#第一种方法
res=models.User.objects.creat(username=username,password=passoword)
#返回值,当前被创建本身。#第二种方法
user_obj=models.User(username=username,password=password)
User_obj.save() #保存数据
3.编辑数据
将编辑按钮所在一行的主键值发送后端
利用?后面携带参数形式
href="/edit_book/?id={{ i.id }}"
# 取到编辑的书的id值edit_id = request.GET.get("id")# 根据id去数据库中把具体的书籍对象拿到edit_book_obj = models.Book.objects.get(id=edit_id)
#get 请求id 网址带?形式
edit_id = request.GET.get("id")if request.method == "POST":# 从提交的数据里面取,书名和书关联的出版社#内置idedit_id = request.POST.get("id")new_title = request.POST.get("book_title")new_publisher_id = request.POST.get("publisher")#更新 方法一 批量更新models.Book.objects.filter(id=edit_id).update(book_title=new_title ,publisher=new_publisher_id )#只修改更新的# 更新 方法二 单独更新。重新赋值,并保存edit_book_obj = models.Book.objects.get(id=edit_id)edit_book_obj.title = new_title # 更新书名edit_book_obj.publisher_id = new_publisher_id # 更新书籍关联的出版社# 将修改提交到数据库edit_book_obj.save()# 缺点是,如果字段多,更新效率低# 重新把字段写一遍,无论修改或不修改# 返回书籍列表页面,查看是否编辑成功return redirect("/book_list/")
4.删除数据
与编辑功能逻辑相似。
delete_id = request.GET.get("id") # 从URL里面取数据#批量删除
models.Book.objects.filter(id=delete_id).delete()
ps:
a. 删除功能需要二次确定。
b. 内部不是真正删除。内部有个删除字段,仅仅修改状态。查看不显示。