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保存网页上的图片或者保存页面为截图
Mar 05 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
Flask框架web开发之零基础入门
Dec 10 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
python对一个数向上取整的实例方法
Jun 18 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
Pycharm Git 设置方法
Sep 15 Python
Python os和os.path模块详情
Apr 02 Python
python热力图实现的完整实例
Jun 25 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
如何开始收听短波广播
2021/03/01 无线电
深入解析php模板技术原理【一】
2008/01/10 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
php给图片加文字水印
2015/07/31 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
php生成HTML文件的类方法
2019/10/11 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
python实现3D地图可视化
2020/03/25 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
篝火晚会主持词
2014/03/25 职场文书
2014年师德承诺书
2014/05/23 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis