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简单实现微信爬虫
Apr 09 Python
Python 3.x 新特性及10大变化
Jun 12 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
PyTorch中permute的用法详解
Dec 30 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
如何搭建pytorch环境的方法步骤
May 06 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
python 获取剪切板内容的两种方法
Nov 28 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
利用 window_onload 实现select默认选择
2006/10/09 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python实现静态服务器
2019/09/05 Python
python的launcher用法知识点总结
2020/08/07 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
学习十八大宣传标语
2014/10/09 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
环境卫生标语
2015/08/03 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书