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实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python unittest模块用法实例分析
May 25 Python
pytorch训练imagenet分类的方法
Jul 27 Python
一百多行python代码实现抢票助手
Sep 25 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
详解python中eval函数的作用
Oct 22 Python
如何定义TensorFlow输入节点
Jan 23 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
python如何将图片转换素描画
Sep 08 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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提交后跳转
2013/06/23 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
Python3使用requests发闪存的方法
2016/05/11 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
天巡全球:Skyscanner Global
2017/06/20 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
公司委托书格式
2014/08/01 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
工作感言一句话
2015/08/01 职场文书
中学图书馆工作总结
2015/08/11 职场文书
大学学生会竞选稿
2015/11/19 职场文书
各国货币符号大全
2022/02/17 杂记
MySQL添加索引特点及优化问题
2022/07/23 MySQL