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单元测试unittest实例详解
May 11 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
python实现自动登录
Sep 17 Python
深入了解Django View(视图系统)
Jul 23 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
Python如何对齐字符串
Jul 30 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python3处理word文档实例分析
Dec 01 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
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
python利用装饰器进行运算的实例分析
2015/08/04 Python
如何在Python中编写并发程序
2016/02/27 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
Python处理中文标点符号大集合
2018/05/14 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python PIL模块的基本使用
2020/09/29 Python
Python实现粒子群算法的示例
2021/02/14 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
读书伴我成长演讲稿
2014/05/07 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014年团总支工作总结
2014/11/21 职场文书
英语邀请函范文
2015/02/02 职场文书
护士个人年终总结
2015/02/13 职场文书
张丽莉观后感
2015/06/16 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
Python中的 Set 与 dict
2022/03/13 Python
Nginx HTTP跳转至HTTPS
2022/05/15 Servers