ORM的跨表操作

在Django的ORM中可以不通过SQL语句直接根据当前表的外键调用对应的另一个表中的数据,根据拥有外键表的外键得到相关联表的数据的操作称为正向跨表

通过ORM建立的两张表 ug是UserInfo的外键,在UserInfo表中显示时会默认把ug变成ug_id存放,而ug则用来存放关联表的数据

class UserGroup(models.Model):
    title = models.CharField(max_length=32)

class UserInfo(models.Model):
    nid = models.BigAutoField(primary_key=True)
    user = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField(default=1)
    ug = models.ForeignKey("UserGroup",null=True,on_delete=models.CASCADE)

#.1UserInfo.objects.all()得到的数据是以对象类型存放在列表中的所以取值时要用对象.的方法,q[0]是表中的第一行数据的对象,UserInfo中每一行关联的外键表的信息都存放在ug里

#.2UserInfo.objects.values()得到的数据是将表中每一行数据以字典的形式存放在一个列表中,ug__title是得到外键对应表中title的值

#.3UserInfo.objects.values_list()得到的数据是将表中每一行数据以元组的形式存放在一个列表中

#.1
q = UserInfo.objects.all()
q[0].ug.title

#.2
q = UserInfo.objects.values('nid','ug_id','ug__title')    #通过外键.双下划线+名称得到关联表中的数据
q[0]['ug__title']

#.3
q = UserInfo.objects.values_list('nid','ug_id','ug__title')
q[0][2]

根据相关联表得到拥有外键表的数据的操作称为反向跨表

#.1得到对象类型的数据通过.拥有外键的表的小写名称_set得到数据

#.2#.3通过在括号里写上拥有外键的表的小写名称__对应列的名称得到数据

#.1
obj = UserGroup.objects.all().first()
result = obj.userinfo_set.all()

#.2
v = UserGroup.objects.values('userinfo__age')

#.3
v = UserGroup.objects.values_list('userinfo__age')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值