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 相关文章推荐
python3读取MySQL-Front的MYSQL密码
May 03 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
Python 爬虫图片简单实现
Jun 01 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
Python简单I/O操作示例
Mar 18 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
python调用API接口实现登陆短信验证
May 10 Python
python 获取计算机的网卡信息
Feb 18 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最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
js tab 选项卡
2009/04/26 Javascript
document.createElement()用法
2013/03/13 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
PHP如何防止SQL注入
2014/05/03 面试题
关于Assembly命名空间的三个面试题
2015/07/23 面试题
课程改革实施方案
2014/03/16 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
2015年质检工作总结
2015/05/04 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
关于vue-router-link选择样式设置
2022/04/30 Vue.js