我还是没听明白为什么要加related_name

我还是没听明白为什么要加related_name

related_name是什么意思?老师最后的讲的也不像是在解释"为什么要多加个related_name"(感觉没解释到点子上去)

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学,你好。老师讲的对应关系,如图:

http://img1.sycdn.imooc.com//climg/5ef8687f0944d17012850669.jpg

写了related_name之后,可以通过“模型.related_name的名称”访问那些关联了此模型的对象,这里的此模型即是WeiboUser,可以访问关联了自己的对象Friend。

如果解决了你的疑惑,请采纳,祝学习愉快~ 

  • 江民川 提问者 #1
    后面的xx是什么?
    2020-06-28 17:59:21
  • 江民川 提问者 #2
    可以通过当成一个属性访问到其他对象我是理解了,但这跟不写会报错也没什么关联吧?
    2020-06-28 18:51:44
  • 好帮手慕笑蓉 回复 提问者 江民川 #3
    同学,你好。 1、Fruit里现在是只有一个外键,那如果不止一个外键了,用“表名+_set”岂不是乱掉了,这句话是这样的,当一个模型的两个字段关联同一个模型时,需要定义related_name来做区分,否则用默认的related_name会重名,导致冲突,因此而报错的,老师视频中也是因为这样的冲突报错的。 2、子表是Fruit,但配合_set时要全小写?是这样的 3、第二张图是省略了class没写吗?是的,只是举了其中字段的一个例子 4、django 默认每个主表的对象都有一个是外键的属性,是指都有一个默认的related_name。 祝学习愉快~
    2020-06-29 10:42:30
慕客yang 2020-06-28 18:02:23

同学你好:

related_name字段指定这个字表在主表中对应的外键属性。

例如:

#买主
class Buyer(models.Model):
    name = models.CharField(verbose_name='买主名', max_length=10) 
#水果  
class Fruit(models.Model): 
    buyer = models.ForeignKey(Buyer, related_name='buyer_fruit') 
    fruit_name = models.CharField(verbose_name='水果名', max_length=10)
    
    
  
#查询买主,再通过买主查询买的水果。
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字段指定这个字表在主表中对应的外键属性, 如下:

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()

如果我解决了同学的问题,请采纳!血学习愉快^_^。


  • 提问者 江民川 #1
    视频里user_from和user_to后面的xx是什么?
    2020-06-28 18:42:13
  • 提问者 江民川 #2
    好多buyer,看晕了,都不知道最后一句里的buyer是哪个buyer了
    2020-06-28 18:44:55
  • 提问者 江民川 #3
    django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的 信息。 这段话我也没听明白
    2020-06-28 18:48:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师