Django默认ORM(四):一对多(O2M)外键操作
外键关联表操作:正反向操作
比如说:有虾面这俩表,填充一些数据 from django.db import models class UserType(models.Model): """ 用户类型 """ title = models.CharField(max_length=32) class UserInfo(models.Model): """ 用户表 """ name = models.CharField(max_length=16) age = models.IntegerField() ut = models.ForeignKey('UserType') 外键关联表操作:正反向操作 # UserInfo,如果这个表中有外键,ut是外键FK字段 - 那么正向操作 # obj = models.UserInfo.objects.all().first() # 取本表字段:obj.name;obj.age # 取外键关联表字段:obj.ut.title # UserType, 表名小写_set.all() - 反向操作 # obj = models.UserType.objects.all().first() # 取本表字段:obj.id,obj.title # 根据本表取UserInfo字段: for row in obj.userinfo_set.all(): # print(row.name,row.age) # result = models.UserType.objects.all() # for item in result: # print(item.title,item.userinfo_set.filter(name='xx'))
values()与values_list() 返回本表数据的字典格式和元组格式
注意 :values() 取出来的是字典格式;values_list() 取出来的是元组格式 # result = models.UserInfo.objects.all().values('id','name') # QuerySet[{'id':'xx','name':'xx'} ] # for row in result: # print(row) # result = models.UserInfo.objects.all().values_list('id','name') # QuerySet[(1,'f'), ] # for row in result: # print(row) # 数据获取多个数据时 # 1. [obj,obj,obj,] # models.UserInfo.objects.all() # models.UserInfo.objects.filter(id__gt=1) # result = models.UserInfo.objects.all() # for item in result: # print(item.name,item.ut.title) # 2. [{id:1,name:fd},{id:1,name:fd},{id:1,name:fd},] # models.UserInfo.objects.all().values('id','name') # models.UserInfo.objects.filter(id__gt=1).values('id','name')
跨表返回更加丰富数据的字典和元组格式
# 不跨表只能取自己表数据 # result = models.UserInfo.objects.all().values('id','name') # for item in result: # print(item['id'],item['name']) # 利用神奇的__,跨表取字段返回一个包含表内字段的字典 # result = models.UserInfo.objects.all().values('id','name',"ut__title") # for item in result: # print(item['id'],item['name'],item['ut__title']) # 3. [(1,df),(2,'df')] # models.UserInfo.objects.all().values_list('id','name') # models.UserInfo.objects.filter(id__gt=1).values_list('id','name') # 不跨表只能取自己表数据 # result = models.UserInfo.objects.all().values_list('id','name') # for item in result: # print(item[0],item[1]) # 利用神奇的__,跨表取字段返回一个包含表内字段的字典 # result = models.UserInfo.objects.all().values_list('id','name',"ut__title") # for item in result: # print(item[0],item[1],item[2])