Django学习 Day8
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习 Day8相关的知识,希望对你有一定的参考价值。
1.查询语句
主要目的是学习在ORM中使用条件查询
Filter(条件)
语法:
MyModel.objects.filter(属性1=值1,属性2=值2)
作用:返回包含此条件的全部数据集
返回值:QuerySet容器对象,内部存放MyModel实例。
说明:当多个属性在一起时为:“and”关系。即属性值1=值1和属性值2=值2两个条件都需要满足。
通过返回对象的query方法的__str__()方法,能够得到我们执行的sql语句。
Exclude(条件)
语法:MyModel.objects.exclude(条件)
作用:返回不包含此条件的全部数据集
示例:
查询id=1且定价大于9.8以外的全部图书
get(条件)
语法:MyModel.objects.get(条件)
作用:返回满足条件的唯一一条数据
说明:该方法只能返回一条数据
查询结果多于1条数据那么会抛出Model.MultipleObjectsReturned异常。
查询结果如果没有数据则抛出Model.DoesNotExist异常。
2.非等值的过滤查询
如果需要查询所有id大于3的书籍信息,那么需要通过查询谓词进行参数定义。
定义:通过查询谓词能够在查询的时候拥有更加灵活的查询条件。
说明:每一个查询谓词是一个独立的查询功能
__exact:等值匹配。
__contains:包含指定的值
__startswith:以XXX开始
__endswith: 以XXX结束
__gt:大于指定值
__gte:大于等于指定值
__lt:小于指定值
__lte:小于等于指定值
3.ORM的更新操作
对于单条数据的操作需要先进行一次查询操作。并对查询到的数据进行update。
1.查
通过get()得到要修改的实体对象
2.改
通过对象.属性的方式修改数据
3.保存
通过对象.save()保存数据
在ORM体系中,如果需要实现对批量数据的更新,需要调用QuerySet数据结构的update方法进行实现批量修改。
示例:
4.数据删除
通常不会轻易在业务里把数据真正删掉,取而代之的是做伪删除,即在表中添加一个布尔型字段(is_active),默认是True;
执行删除时,将欲删除数据的is_active字段置为False
注意:用伪删除时,确保显示数据的地方,均加了is_active=True的过滤查询.
单条数据的删除方法:
b1 = Book.objects.filter(id=book_id)
b1.delete()
多条数据的删除方法:
b1 = Book.objects.all()
b1.delete()
这种方式使用的是QuerySet方式进行delete方法的调用进行删除。
5.完善图书系统的删除和修改功能。
1.增加路由
2.编写视图函数
3.编写视图层
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图书修改</title>
</head>
<body>
<form action="/library/update_book/book.id" method="post">
<table>
<tr>
<td>
id
</td>
<td>
<input type="text" name="id" value="book.id" disabled="disabled">
</td>
</tr>
<tr>
<td>
name
</td>
<td>
<input type="text" name="name" value="book.name">
</td>
</tr>
<tr>
<td>price</td>
<td>
<input type="text" name="price" value="book.price">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="提交修改信息">
</td>
</tr>
</table>
</form>
</body>
</html>
4.最终实现效果
以上是关于Django学习 Day8的主要内容,如果未能解决你的问题,请参考以下文章