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编写第一个IDA插件的实例
May 29 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
python实现超市管理系统(后台管理)
Oct 25 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
python数据爬下来保存的位置
Feb 17 Python
Python 解析简单的XML数据
Jul 24 Python
用Python简陋模拟n阶魔方
Apr 17 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Pycharm调试程序技巧小结
2020/08/08 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
校三好学生主要事迹
2014/01/11 职场文书
日化店促销方案
2014/03/26 职场文书
责任心演讲稿
2014/05/14 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
教师节大会主持词
2015/07/06 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技