在model中创建学生表,信息表(一个学生对应一个信息),如下;
from django.db import models # Create your models here. #创建学生表 class Student(models.Model): #创建名字字段 sname = models.CharField(max_length=30) #重写__str__方法,方便观察数据 def __str__(self): return self.sname class Meta: #指定表名 db_table = 'student' #创建信息表 class Archive(models.Model): #创建电话字段 phone = models.CharField(max_length=11) #创建一对一关系,Archive为从表,Student为主表 student = models.OneToOneField(Student,on_delete=models.PROTECT) def __str__(self): return self.phone class Meta: db_table = 'archive'
正向查询 由主表查从表
def get_archive_by_student(request): #获取主表中的一条对象数据 student = Student.objects.get(pk=4) print(student) # 从表是类名的小写 #直接调用student.archive就可以得到student对应的从表中的数据 print(student.archive) return HttpResponse("查看学生档案")总结:基本语法:主表对象名.从表类名小写
# 反向查询 由从表查主表
def get_student_by_archive(request): archive = Archive.objects.get(pk=1) # 主表名是类名小写 print(archive.student) return HttpResponse("由档案查看学生")总结:与正向查询一个意思
跨关系查询
def loopup(request): # 根据学生查档案 archive = Archive.objects.filter(student__id=10) #由档案查学生 student = Student.objects.filter(archive__phone__exact='874438251') return HttpResponse(student)总结:基本语法:
主查从
从表类名.objects.filter(主表类名小写__属性__比较符='****')
从查主:
主表类名.objects.filter(从表类名小写__属性__比较符='*****')