ORM之连表操作
UserInfo和UserType两个表关联,UserInfo的外键连UserType的主键。拿到UserInfo的所有信息,就可以拿与UserInfo相关联的UserType的数据。
result = model.UserInfo.object.all()
与UserInfo有关联的UserType表:
for obj in result:
print(obj.name,obj,age,obj.ut_id,obj.ut_title)
#ut_id是UserType表的id,ut_title是UserType中的title
#如果UserType表中,也有Foreigkey字段,也可以继续跨表,接着点就行。
eg:
在model中:
from django.db import models class Foo(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): #主键会自行创建,也可自己创建,nid为字段 nid = models.BigAutoField(primary_key=True) username = models.CharField(max_length=32) password = models.CharField(max_length=64) #增加列,在增加是,可以定义为空,也可定义为默认值 age = models.IntegerField(null=True) # age = models.IntegerField(default=1) #外键关联UserGroup表,代表UserGroup的一行数据 usergroup = models.ForeignKey("UserGroup",null=True) class UserGroup(models.Model): #隐藏id,Django的ORM会加的 title = models.CharField(max_length=32) fo = models.ForeignKey(‘Foo‘,null=True)
在views中:
from models同级目录文件 import models def test(request): result = models.UserInfo.objects.all() print(result) for i in result: print(i.username,i.usergroup.title,i.usergroup.fo.caption)
在print(i.username,i.usergroup.title,i.usergroup.fo.caption)中,有跨一张表的,和两张表的。
i.username:拿的本表的
i.usergroup.title 跨一张表的
i.usergroup.fo.caption 跨两张表的