django 表的一對多關係建立和主從表相互查詢
阿新 • • 發佈:2018-12-17
在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.過濾器(從表類名小寫__屬性__比較符='*******')