外键关联表操作:正反向操作
比如说:有虾面这俩表,填充一些数据
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])