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统计一个文本中重复行数的方法
Nov 19 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
Python去除列表中重复元素的方法
Mar 20 Python
python读取oracle函数返回值
Jul 18 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python3.5 创建文件的简单实例
Apr 26 Python
详解Python 函数如何重载?
Apr 23 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
对Django 中request.get和request.post的区别详解
Aug 12 Python
pycharm代码删除恢复的方法
Jun 26 Python
Python中itertools库的四个函数介绍
Apr 06 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中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
js创建数组的简单方法
2016/07/27 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
微信JS接口大全
2016/08/25 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
新手该如何学python怎么学好python?
2008/10/07 Python
python3访问sina首页中文的处理方法
2014/02/24 Python
解析Python中while true的使用
2015/10/13 Python
python操作gitlab API过程解析
2019/12/27 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
Django权限控制的使用
2021/01/07 Python
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
医药代表个人的求职信分享
2013/12/08 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
家装业务员岗位职责
2015/04/03 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书