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 相关文章推荐
python中OrderedDict的使用方法详解
May 05 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python中 logging的使用详解
Oct 25 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
Python并发编程实例教程之线程的玩法
Jun 20 Python
Python软件包安装的三种常见方法
Jul 07 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截取字符串函数分享
2015/02/02 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
微信小程序左右滑动的实现代码
2017/12/15 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
python算法学习之计数排序实例
2013/12/18 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
python str字符串转uuid实例
2020/03/03 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
.NET程序员的几道面试题
2012/06/01 面试题
甜品店的创业计划书范文
2014/01/02 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
小学生运动会报道稿
2014/09/12 职场文书
五年级上册复习计划
2015/01/19 职场文书
高中教师个人总结
2015/02/10 职场文书
英语辞职信怎么写
2015/02/28 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
Python实现byte转integer
2021/06/03 Python
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript