在modes中创建类,如下:
from django.db import models # Create your models here. #构建team表,作为主表 class Team(models.Model): #创建名字属性 tname = models.CharField(max_length=20) #重写__str__方法,方便观看结果 def __str__(self): return self.tname #定义表名 class Meta: db_table = 'team' #构建group1表,作为主表 class Group1(models.Model): gname = models.CharField(max_length=20) #多对一模型通过ForeignKey表示多对一 # 外键设置为DO_NOTHING,从表中有记录依赖主表记录,则主表记录不允许删除 team = models.ForeignKey(Team,on_delete=models.DO_NOTHING) def __str__(self): return self.gname class Meta: db_table = 'group1'
正向查询,主表查从表,如下:
def get_group_by_team(request): #得到Team中的一个对象 team = Team.objects.get(pk=3) #得到team对应group1表中的数据 print(team.group1_set.all()) return HttpResponse(123)总结:基本语法为:
主表对象.从表小写_set.过滤器方法
反向查询,从表查主表
def get_team_by_group(request): #得到Group1中的一个对象 g1 = Group1.objects.last() # 一个组对应一个班级,可以通过team直接获取班级信息 print(g1.team.tname) return HttpResponse("通过组获取班级信息")总结:基本语法为:
从表对象.主表类名小写.属性(若要获取特定属性)
跨关系查询
# 跨关系查询 def lookup1(request): # 从表查主表 team = Team.objects.filter(group1__id__exact=5) #主表查从表 g1 = Group1.objects.filter(team__tname='1802') return HttpResponse("跨关系查询")总结:基本语法为:
从表查主表:从表类名.objects.过滤器(主表类名小写__属性__比较符='*******')
主表查从表:主表类名.objects.过滤器(从表类名小写__属性__比较符='*******')