Django(28)基于双下划线查询(join查询)

1,正向关联按关联字段
2,反向按表名小写或related_name

查询张三的年龄

ret = Student.objects.filter(name="张三").values("age")
print(ret) # <QuerySet [{'age': 22}]>

# (1) 查询年龄大于22的学生的姓名以及所在名称班级
# select db_student.name,db_class.name from db_student inner join db_class on db_student.clas_id = db_class.id where db_student.age>22;

# 方式1 : Student作为基表
ret = Student.objects.filter(age__gt=22).values("name","clas__name")
print(ret)
# 方式2 :Clas表作为基表
ret = Clas.objects.filter(student_list__age__gt=22).values("student_list__name","name")
print(ret)

# (2) 查询计算机科学与技术2班有哪些学生

ret = Clas.objects.filter(name="计算机科学与技术2班").values("student_list__name")
print(ret)  #<QuerySet [{'student_list__name': '张三'}, {'student_list__name': '李四'}]>

# (3) 查询张三所报课程的名称

ret = Student.objects.filter(name="张三").values("courses__title")
print(ret) # <QuerySet [{'courses__title': '近代史'}, {'courses__title': '篮球'}]>

# (4) 查询选修了近代史这门课程学生的姓名和年龄

ret = Course.objects.filter(title="近代史").values("students__name","students__age")
print(ret) # <QuerySet [{'students__name': '张三', 'students__age': 22}, {'students__name': '李四', 'students__age': 24}]>

# (5) 查询李四的手机号

ret = Student.objects.filter(name='李四').values("stu_detail__tel")
print(ret)  # <QuerySet [{'stu_detail__tel': '911'}]>


# (6) 查询手机号是110的学生的姓名和所在班级名称

# 方式1
ret = StudentDetail.objects.filter(tel="110").values("stu__name","stu__clas__name")
print(ret) # <QuerySet [{'stu__name': '张三', 'stu__clas__name': '计算机科学与技术2班'}]>

# 方式2:
ret = Student.objects.filter(stu_detail__tel="110").values("name","clas__name")
print(ret) # <QuerySet [{'name': '张三', 'clas__name': '计算机科学与技术2班'}]>
posted @ 2021-12-04 23:27  下个ID见  阅读(162)  评论(0)    收藏  举报