模型类的CRUD
增加数据
#使用模型类的对象管理器objects.create
User.objects.create(username=xxx,password=xxx,email=xxx,phone=xxx)
#或者
user = User(username=xxx,password=xxx,email=xxx,phone=xxx)
user.save()
可以在Django shell中尝试,代码更改后需重新进入
python3 manage.py shell
>>from user.models import User
查询
User.objects.all() #查询所有数据-->QuerySet对象,遍历获取每个数据对象
#按照字段取值,返回的QuerySet为字典列表
User.objects.values('col1',"col2",...)
#返回的QuerySet为元组列表
User.objects.values_list("col1","col2")
#排序
User.objects.order_by("-age") #降序,默认升序
User.objects.values("username",'age').order_by("age",'-xx') #按照age升序
QuerySet对象.query #拿到sql语句
练习, 配置一个路由/user/all, 请求方式GET, 视图,show_all
#views.py
def show_all(request):
users = User.objects.all()
return render(request,"index.html",locals())
#locals()函数局部变量的字典
让前端以表格形式显示所有的用户数据
条件查询
User.objects.filter(username="jack",age=12) #多个条件and 连接,返回QuerySet对象
#排除查询
User.objects.exclude(username="jack")#排除该条件的数据,返回QuerySet
#获取一个对象,返回对象
User.objects.get(username="jack")
#查询到多个对象,报错
#没有数据也报错,注意异常捕获
#查询谓词
字段__谓词
User.objects.filter(id__exact=1) #id为1
User.objects.filter(id__gt=1) #id>1
User.objects.filter(id__lte=5) #id<=5
User.objects.filter(username__exact="jack") #username 为jack
User.objects.filter(username__contains="jack")#username中包含jack
User.objects.filter(username__startswith="j") #以j开头的
User.objects.filter(username__endswith="k")
User.objects.filter(username__in=["jack","tom"])#是否在范围内
User.objects.filter(age__range=(25,35))
更新
#更新一个对象
obj = User.objects.get(username="jack")
obj.age = 30
obj.save()
#批量更新
queryset = User.objects.filter(age__gt=5)
queryset.update(age=20)
在以表格形式显示用户信息的基础上,完成用户信息的更新,删除两个按钮的功能。 <a href="book/update/{{ obj.id }}">更新 <a href="book/delete/{{ obj.id }}">删除
input输入组件: 不可编辑,disabled="disabled" 不提交,不设置name属性
删除
#删除单个对象
obj = User.objects.get(username="jack")
obj.delete()
#批量删除
queryset = User.objects.filter(age__lt=5)
queryset.delete()
#伪删除,不真正删除数据
is_delete = models.BooleanField("是否删除",default=False)
#查询数据时,只查询is_delete为False的数据