Django 单表分组查询
建表
class Students(models.Model):
"""
学生表
"""
CLASS_CHOICES = (
(1, "一班"),
(2, "二班"),
(3, "三班")
)
name = models.CharField(max_length=10, verbose_name="姓名")
classes = models.IntegerField(default=1, choices=CLASS_CHOICES, verbose_name="班级")
age = models.IntegerField(default=18, verbose_name="年龄")
grade = models.DecimalField(default=0, max_digits=5, decimal_places=1, verbose_name="分数")
class Meta:
verbose_name = "学生表"
verbose_name_plural = verbose_name
db_table = "students"
插入假数据
这里直接用的sql语句,也可以使用Navicat创建,更方便
insert into students(name,classes,age,grade) values ("小洛",1,18,82),("小峰",1,18,82),
-> ("旺旺",2,19,79),("阿华",2,18,91),("嗯哼",3,17,88);
django orm查询
class StudentS(APIView):
"""
学生类
"""
def get(self, request):
# 获取所有的班级字段
student = Students.objects.values("classes").distinct()
# student: <QuerySet [{'classes': 1}, {'classes': 2}, {'classes': 3}]>
students = []
for cla in student:
# 循环所有学生数据并将班级相同的学生归类到同一列表中
stu = Students.objects.filter(classes=cla["classes"]).values("classes", "name")
students.append(stu)
return Response(students)
效果如下
该方法显得比较笨,不推荐使用,谁有更好的方法请留言一下,手动滑稽>_<