时间:2021-05-22
我们从一个简单的事说起:
吃货君到水果摊捡漏买了两种水果,分别是人参果和蟠桃;后来水果摊主冥冥中感觉自己遗失了重宝,似乎和一个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的用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
如果你在ForeignKey或ManyToManyField字段上使用related_name属性,你必须总是为该字段指定一个唯一的反向名称。但在抽象基类上这样
mysqldump常用于MySQL数据库逻辑备份。1、各种用法说明A.最简单的用法:mysqldump-uroot-pPassword[databasename
下面介绍jquery字符串切割函数substring的用法 代码如下:jquery字符串切割函数substring的用法说明
1、各种用法说明A.最简单的用法:复制代码代码如下:mysqldump-uroot-pPassword[databasename]>[dumpfile]上述命令
mysqldump常用于MySQL数据库逻辑备份。1、各种用法说明A.最简单的用法:mysqldump-uroot-pPassword[databasename