related_name的名称可以是一样的?

正在回答

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

1回答

同学你好:

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

所以,related_name的值不建议相同。

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

  • 你仰慕的男神 提问者 #1
    既然related_name的值不能相同。为何本章中老师还这样写呢?
    2019-10-24 17:32:30
  • 好帮手乔木 回复 提问者 你仰慕的男神 #2
    同学你好:这三个关联的对象不同,那么使用对象关联的comments的含义就不同。分别是Product,User,Order的外键。学习愉快^_^.
    2019-10-24 17:44:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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