django中related_name的用法说明

 更新时间:2020年05月20日 11:39:33   作者:不见天高  
这篇文章主要介绍了django中related_name的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我们从一个简单的事说起:

吃货君到水果摊捡漏买了两种水果,分别是人参果和蟠桃;后来水果摊主冥冥中感觉自己遗失了重宝,似乎和一个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 web实战教程之Django文件上传和处理详解

    Python web实战教程之Django文件上传和处理详解

    Django和Flask都是Python的Web框架,用于开发Web应用程序,这篇文章主要给大家介绍了关于Python web实战教程之Django文件上传和处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 教你使用Python pypinyin库实现汉字转拼音

    教你使用Python pypinyin库实现汉字转拼音

    今天,发现了一个好玩儿的库,叫做 “pypinyin ”,用于帮助我们实现汉字转拼音,文中有非常详细的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Python数据结构之循环链表详解

    Python数据结构之循环链表详解

    循环链表 (Circular Linked List) 是链式存储结构的另一种形式,它将链表中最后一个结点的指针指向链表的头结点,使整个链表头尾相接形成一个环形,使链表的操作更加方便灵活。本文将详细介绍一下循环链表的相关知识,需要的可以参考一下
    2022-01-01
  • Python实现简单飞机大战

    Python实现简单飞机大战

    这篇文章主要为大家详细介绍了Python实现简单飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • python机器学习实战之最近邻kNN分类器

    python机器学习实战之最近邻kNN分类器

    这篇文章主要介绍了python机器学习实战之最近邻kNN分类器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python 3调用百度OCR API实现剪贴板文字识别

    python 3调用百度OCR API实现剪贴板文字识别

    这篇文章主要为大家详细介绍了python 3调用百度OCR API实现剪贴板文字识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 浅谈python socket函数中,send与sendall的区别与使用方法

    浅谈python socket函数中,send与sendall的区别与使用方法

    下面小编就为大家带来一篇浅谈python socket函数中,send与sendall的区别与使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 在python中用url_for构造URL的方法

    在python中用url_for构造URL的方法

    今天小编就为大家分享一篇在python中用url_for构造URL的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python安装scipy的步骤解析

    python安装scipy的步骤解析

    这篇文章主要介绍了python安装scipy的步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python正则表达式之对号入座篇

    python正则表达式之对号入座篇

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
    2018-07-07

最新评论