django中related_name的用法说明


Posted in Python onMay 20, 2020

我们从一个简单的事说起:

吃货君到水果摊捡漏买了两种水果,分别是人参果和蟠桃;后来水果摊主冥冥中感觉自己遗失了重宝,似乎和一个100岁的老爷爷有关,翻看自己的收款账单,当看到吃货君的账单时心头一紧,就是他买走了我的宝贝,我就要看看他买了我的什么宝贝! 店主通过吃货君的名字找到了他买的水果,发现竟然有万年蟠桃以及亿年人参过后,嚎啕大哭起来!!!

吃饭君是走了什么运呢???

下面我们根据上面的小情节定义两个模型,分别是买主模型以及水果模型,一个买主对应多个水果模型,简单的一对多模型:

class Buyer(models.Model):
  name = models.CharField(verbose_name='买主名', max_length=10) 
  Alipay_id = models.CharField(verbose_name='支付宝账号') 
  age = models.IntegerField(verbose_name='买主年龄',blank = True)
 
class Fruit(models.Model): 
  buyer = models.ForeignKey(Buyer, related_name='buyer_fruit') 
  fruit_name = models.CharField(verbose_name='水果名', max_length=10) 
  weight = models.FloatField(verbose_name='水果重量')

通常,我们要查询买主买了哪些水果,首先要根据条件找到买主信息,然后根据买主信息找到买主所购买的水果,本例中如下:

#首先获得水果模型中外键指向的表中对象:
buyer = Buyer.objects.filter(age = 100).first()
 
#然后通过‘_set'方法获得子表中的数据:
fruits = buyer.fruit_set.all() 
"""
django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。 这个属性的名称默认是以子表的名称小写加上_set()来表示,这里我们的主表是buyer,字表是fruit,所以主表外键的属性就是fruit_set
"""

上面的fruit_set是django为对象buyer默认创建的外键的属性,个人建议采用自定义的方式定义主表的外键,这样使用时更熟悉一些吧!

而related_name就实现这个功能,在字表中定义外键时,增加related_name字段指定这个字表在主表中对应的外键属性,

如下:

class Fruit(models.Model): 
  buyer = models.ForeignKey(Buyer, related_name='buyer_fruit') 
"""
主表:buyer
子表:fruit
子表在主表中对应的外键属性:related_name='buyer_fruit'
"""

那么我们就可以通过自定义外键的方式找到需要的信息了:

#首先获得水果模型中外键指向的表中对象:
buyer = Buyer.objects.filter(age = 100).first()
 
#然后通过子表中自定义的外键获取子表的所有信息:
fruits = buyer.buyer_fruit.all()

以上这篇django中related_name的用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Pyhton中防止SQL注入的方法
Feb 05 Python
python通过线程实现定时器timer的方法
Mar 16 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
python实现装饰器、描述符
Feb 28 Python
Python zip()函数用法实例分析
Mar 17 Python
Python 查找字符在字符串中的位置实例
May 02 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
对python产生随机的二维数组实例详解
Dec 13 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
django日志默认打印request请求信息的方法示例
May 17 Python
使用scrapy实现增量式爬取方式
Jun 21 Python
在django中form的label和verbose name的区别说明
May 20 #Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 #Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 #Python
如何在sublime编辑器中安装python
May 20 #Python
Django 解决distinct无法去除重复数据的问题
May 20 #Python
在主流系统之上安装Pygame的方法
May 20 #Python
python Django 反向访问器的外键冲突解决
May 20 #Python
You might like
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
JS的反射问题
2010/04/07 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
Django如何重置migration的几种情景
2021/02/24 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
护士自我评价范文
2014/01/25 职场文书
社区消防工作实施方案
2014/03/21 职场文书
股东协议书
2014/04/14 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
给老婆的道歉信
2015/01/20 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang