Django 第三天

模型成员

		类属性:
				隐藏的类属性:
						object:是Manager类型的一个对象,作用是与数据库进行交互
									 当定义模型类是没有指定管理器,则Django为模型创建一个名为objects的管理器
						自定义管理器:
# 自定义模型管理器
# 当自定义了之后,objects就不可用了
stuObj = models.Manager()
						自定义管理器Manager类:模型管理器是Django的模型进行与数据库交互的接口,一个模型可以有多个模型管理器
						作用:
								向管理器类中添加额外的方法
								修改管理器返回的原始查询集:
										重写get_queryset()方法:
class StudentsManager(models.Manager):
# 过滤掉被删除的人
    def get_queryset(self):
        return super(StudentsManager, self).get_queryset().filter(isDelete=False)
class Students(models.Model):
    # 自定义模型管理器
    # 当自定义了之后,objects就不可用了
    stuObj = models.Manager()
    stuObj2 = StudentsManager() 
		创建对象:
				目的:向数据库中添加数据
				当创建对象时,Django不会对数据库进行读写操作,当调用save()方法时才与数据库交互,将对象保存到数据库中
				注意:__init__方法已经在父类models.Model中使用,在自定义的模型中无法使用
				方法:在模型类中增加一个类方法:
	@classmethod
    def createStudent(cls, name, age, gender, contend, grade, lastT, createT):
        stu = cls(sname=name, sage=age, sgender=gender, scontend=contend, sgrade=grade, lastTime=lastT, createTime=createT)
        return stu
						   在定义管理器中添加一个方法:
class StudentsManager(models.Manager):
    def get_queryset(self):
        return super(StudentsManager, self).get_queryset().filter(isDelete=False)

    def createStudent(self, name, age, gender, contend, grade, lastT, createT):
        stu = self.model()
        stu.sname = name
        stu.sage = age
        stu.sgender = gender
        stu.scontend = contend
        stu.sgrade = grade
        stu.lastTime = lastT
        stu.createTime = createT
        return stu

模型查询

		概述:
				查询集表示从数据库中获取的对象的集合
				查询集可以有多个过滤器
				过滤器就一个函数,基于所给的参数限制查询结果
				从SQL角度来说,查询集和select语句等价,过滤器就相当于where条件
		查询集:在管理器上调用过滤器方法返回查询集
					  查询集经过过滤器筛选后返回新的查询集,所以可以写成链式调用
					  惰性执行:
					  		创建查询集不会带来任何数据的访问,直到调用数据库时,才会访问数据
					  直接访问数据的情况:
					  		迭代、序列化、与if合用 
					  返回查询集的方法称为过滤器:
					  		all():返回查询集中所有的数据
					  		filter():返回符合条件的数据
					  					 filter(键=值,[键=值])
					  					 filter(键=值).filter(键=值)
					  		exclude():过滤掉符合条件的数据
					  		order_by():排序
					  		values():一条数据就是一个对象(字典),返回一个列表
					  返回单个数据:
					  		get():返回一个满足条件的对象
					  				   注意:如果没有找到符合条件的对象,会引发一个异常(模型类.DoesNotExist)
					  				   			  如果找到多个对象,会引发一个异常(模型类.MultipleObjectsReturned)
					  		count():返回当前查询集中的对象个数
					  		first():返回查询集中第一个对象
					  		last():返回查询集中最后一个对象
					  		exist():判断查询集中是否有数据,如果有返回True	
					  限制查询集:
					  		查询集返回列表,可以使用下标的方法进行限制,相当于SQL中饿limit语句
					  		注意:下标不能是负数
def StudentOrderFive(request):
    studentList = Students.stuObj2.all()[0:5]
    return render(request, 'MyApp/Students.html', {"students": studentList})
					  查询集的缓存:
					  		每个查询集都包含一个缓存,来最小化的对数据库访问
					  		在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结果,以后的查询直接使用查询集的缓存
					  字段查询:
					  		概述:
					  				实现了where语句,作为方法filter(),exclude(),get()的参数
					  				语法:属性名称__比较运算符=值
					  				外键:属性名_id
					  				转义:like语句中使用%是为了匹配占位,匹配数据中的%(where like '%')
					  						   filter(sname__contains='%'
					  		比较运算符:
					  				exact:判断,区分大小写
					  				contains:是否包含,区分大小写
studentList = Students.stuObj2.filter(sname__contains="成")
					  				startswith、endswith:以value开头或结尾,区分大小写
					  				以上四个在前面加上i,就表示不区分大小写
					  				isnull、isnotnull:是否为空,filter(sname_isnull=False)
					  				in:是否包含在范围内
studentList = Students.stuObj2.filter(pk__in=[2, 4, 6, 8])
					  			gt:大于
					  			gte:大于等于
					  			lt:小于
					  			lte:小于等于
					  			year:年
studentList = Students.stuObj2.filter(lastTime__year=2020)
					  			month:月
					  			day:天
					  			hour:小时
					  			minute:分钟
					  			second:秒
					  			跨关联查询:
					  					处理join查询
					  					语法模型类名__属性名__比较运算符
gradeList = Grades.objects.filter(students__sname__contains="成龙")
print(gradeList)
					  			查询快键:pk:代表主键
					  		聚合函数:
					  				使用aggregate():函数返回聚合函数的值
					  				Avg():平均值
					  				Count():数量和
					  				Max():最大值
from django.db.models import Max,Min
maxAge = Students.stuObj2.aggregate(Max('sage'))
					  				Min():最小值
					  				Sum():累计和
					  		F对象:
					  				可以使用模型的A属性与B属性进行比较
from django.db.models import F, Q
g=Grades.objects.filter(gboynum__gt=F('ggirlnum '))
					  				支持F对象的算数运算
g=Grades.objects.filter(gboynum__gt=F('ggirlnum ')+20)
					  		Q对象:
					  				过滤器的方法中的关键字参数,条件为And模式
					  				需求:进行or查询
					  				解决:使用Q对象
studentList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=25))
studentList = Students.stuObj2.filter(~Q(pk__lte=3)) # 取反
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值