Django的跨表查询单下划线_和双下划线__的区别

本文介绍了Django中单下划线_和双下划线__在跨表查询时的区别。通过实例解释了点操作符直接查询表内字段,而双下划线__用于关联查询。同时,单下划线_在查询外键时会返回对象,而下划线_id则直接获取ID值,不进行跨表操作。最后探讨了多表关联查询中下划线_和__的应用场景。
摘要由CSDN通过智能技术生成

一、下划线__和点的区别

  1. 存在两个表:

biao1:
字段:name = test1
字段:data = data1

biao2:
字段:name = test2
字段:data = data2
外键:b1 = 外键( biao1 ) # 此时数据为biao1中的(test1的整个数据)

  1. 查询表内字段(点):直接查询biao1数据,A = biao1.object.all()[0] , A.name即可查询出来,
  2. 跨表查询数据时(__):
    当只传入一个test1数据,需要查询biao2中的与biao1的name有关联的数据时:
    B = biao2.object.filter(b1__name=‘test1’)
    此时查询出来的B就是包含test2的整个数据的QuerySet对象

二、那么一个下划线_又是怎么回事呢?

  1. 当我们对biao2进行跨表查询的时候:C= biao2.object.all()[0] , 此时我们跨表查询的时候:
    C.b1 这时候我们得到的是biao1的一个对象,通过查询:
    C.b1.id # 得到结果为 1 (这个1是假设的)
    C.b1.name # 得到结果为 test2
    C.b1.data # 得到结果为 data2

  2. 我们还可以通过这样来查询,一个下划线_:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值