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程序中操作文件之isatty()方法的使用教程
May 24 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
实例讲解python中的协程
Oct 08 Python
在Python中使用Neo4j的方法
Mar 14 Python
linux安装python修改默认python版本方法
Mar 31 Python
Python应用领域和就业形势分析总结
May 14 Python
python常用排序算法的实现代码
Nov 08 Python
浅谈Python 参数与变量
Jun 20 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Python图像读写方法对比
Nov 16 Python
解决python3中os.popen()出错的问题
Nov 19 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Django组件content-type使用方法详解
2019/07/19 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
电气个人求职信范文
2014/02/04 职场文书
作风大整顿心得体会
2014/09/10 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
优秀党员推荐材料
2014/12/18 职场文书
离婚起诉状范本
2015/05/19 职场文书
跑吧孩子观后感
2015/06/10 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python