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 IDLE加上自动补全和历史功能
Nov 30 Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
在Python的setuptools框架下生成egg的教程
Apr 13 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
django 读取图片到页面实例
Mar 27 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
Django serializer优化类视图的实现示例
Jul 16 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 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/03 新手入门
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
深入理解Node module模块
2018/03/26 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
python编码总结(编码类型、格式、转码)
2016/07/01 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
Python3获取cookie常用三种方案
2020/10/05 Python
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
春季运动会加油词
2015/07/18 职场文书
户外拓展训练感想
2015/08/07 职场文书