模型操作模型常用的操作对应的是数据库中的增删改查。参考文档https://docs.djangoproject.co...Examplefilefromdjango.dbimportmodelsclassStudents(models.Model):"""Studenttable"""username=models.CharField(max_length=64,null=False,unique=True)age=models.IntegerField()cls=models.ForeignKey('ClassInfo',on_delete=models.DO_NOTHING)classClassInfo(models.Model):"""Classtable"""title=models.CharField(max_length=64,null=False,unique=True)teachers=models.models.ManyToManyField("Teachers")classTeachers(models.Model):"""教师表"""name=models.CharField(max_length=16,null=False,unique=True)1.单表操作1.1第一种方法增加数据obj=models.Students(username='张三',cls_id='1')obj.save()第二种方法models.Students.objects.create(username='张三',cls_id='1)1.2查询数据getget#获取id为1的学生models.Students.objects.get(id='1')filterget#查询id=1studentobj=models.Students.objects.filter(id='1')#查询年龄大于th的学生objan19=models.Students.objects.filter(age__gt=19)#查询年龄大于19小于22的学生obj=models.Sstudents.objects.filter(age__gt=19,age__lt=22)#查询id在[1,3,5,6]中的学生obj=models.Students.objects.filter(id__in=[1,3,5,6])#查询姓名中包含“Wei”的学生obj=models.Students.objects.filter(username__contains=='Wei')all()查询所有stu_list=models.Students.objects.all()#返回查询集,其中包含所有的是对象vlauesstu_list=models.Students.objects.values()#返回查询机,里面全是字典,没有写字段,默认显示错误是vlauess_liststu_list=models.Students.objects。values_list()#返回查询机,全是Tuple1.3修改数据update#修改id为1的学生的班级obj=models.Students.objects.filter(id='1')#查找id为学生的班级1通过查询obj.update(cls_id=2)#使用update更新学生信息1.4删除数据#修改id为1的学生的班级obj=models.Students.objects.filter(id='1')#找到学生与我d1throughqueryobj.delete()#使用delete()删除1.5查询集合查询函数函数名称函数返回值说明get返回一条且仅一条满足表中条件的数据。返回值是写在模型对象参数中的查询条件。然后抛出异常MultipleObjectsReturned2)如果查询不到数据,则抛出异常:DoesNotExist。all返回模型类对应的表中的所有数据。返回值为QuerySet类型的查询集过滤器返回满足条件的数据。返回值是一个QuerySet类型的参数,用来写查询条件。exclude返回不满足条件的数据。返回值是一个QuerySet类型的参数,用来写查询条件。order_by对查询结果进行排序。返回值是要写的QuerySet类型参数,根据哪些字段排序。all,filter,exclude,order_by调用这些函数会生成查询集,QuerySet类对象可以继续调用以上所有函数。查询集的特点1)惰性查询:只有当查询集中的数据被实际使用时,才会对数据库进行真正的查询。2)缓存:当使用同一个查询集时,第一次使用时会发生实际的数据库查询,然后缓存结果,以后使用查询集时,缓存中的结果使用。3)查询集可以通过下标或者切片来限制查询集的结果,类似于列表。对queryset进行切片会生成一个新的queryset,下标不允许为负数。2.关联操作2.1一对多操作学生和班级是一对多的关系。一个学生对应一个班级,一个班级对应多个学生。通过students,找到类titlestu_obj=model.Stuents.objects.get(id=1)cls_title=stu_obj.cls.title##使用双下划线的方法cls_obj=model.Stuents.objects.filter(id=1).values_list("classinfo__title")查询一年级1班的所有学生cls_obj=models.ClassInfo.objects.filter(title='Class1,Grade1')stu_list=cls_obj.students_set.all()2.2多对多operationcreate#为一年级1班新建一个老师cls_obj=models.ClassInfo.objects.filter(title='一年级1班')cls_obj.teachers.create(name='张老师')add#分配老师liwithid1toClass1,Grade1cls_obj=models.ClassInfo.objects.filter(title='Class1,Grade1')teacher_obj=models.Teachers.filter(id=1)cls_obj.teachers.add(teacher_obj)#也可以添加多个teacher_list=models.Teachers.filter(id__in=[1,2,3,4,5])cls_obj.teacher.add(*teacher_list)#也可以直接添加idcls_obj.teacher.add(1)deleteremove#从Class1,Grade中删除id为1的老师1cls_obj=models.ClassInfo.objects.filter(title='一年级1班')cls_obj.teachers.remove(1)#或者删除对象teacher_obj=models.Teachers.filter(id=1)cls_obj.teachers.remove(teacher_obj)查询一年级1班的老师cls_obj=models.ClassInfo.objects.filter(title='Class1,Grade1')teachers_list=cls_obj.teachers.all()3.聚合和分组聚合操作包括:sumcountavgmaxminaggregate:调用该函数使用aggregationreturn值是一个字典,在使用聚合类之前需要导入。下面的例子fromdjango.db.modelsimportSum,Count,Max,Min,Avg#查看有多少学生stu_count=models.Stuents.objects.all().aggregate(Count('id'))分组分组使用annotate()#查询分配给每个班级的教师人数models.ClassInfo.objects.all().annotate(teacher_num=Count("teachers"))
