如何使用django中related_name

发布时间:2020-07-23 10:30:18 作者:小猪
来源:亿速云 阅读:124

这篇文章主要讲解了如何使用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有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. django中socket如何使用
  2. Django怎么解决model反向引用中的related_name问题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

django dj

上一篇:如何解决WIN7从开始菜单选择关机时电脑没反应的问题

下一篇:为什么工作10年你的工资还不如新来的实习生

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》