Django Models ForeignKey 的 related_name 属性

related_name:

related_name 是一个可选的参数,用于在一个模型中指定与另一个模型之间的关系的反向关系的名称。通常,使用related_name允许我们在查询相关对象时使用直观和易记的属性名称。

例:

两张表,如果只有一个Foreignkey,可以直接反向查询

class UserInfo(models.Model):
    emp_num = models.CharField(max_length=8, verbose_name='员工号', unique=True)
    
class ProjectUser(models.Model):  
    # 关联到UserInfo ,只有 user 字段关到 UserInfo 表
    user = models.ForeignKey(verbose_name='参与者', to='UserInfo', on_delete=models.CASCADE)

直接反向查询

# 从UserInfo表中查询id=1的对象
obj = UserInfo.objects.filter(id=1)
# 小写表名_set 格式,反向关联查询obj对象在 ProjectUser 表中的 user 字段信息 
obj.projectuser_set.all()

如果有一个或多个Foreignkey, 就需要使用 related_name 属性

class UserInfo(models.Model):
    emp_num = models.CharField(max_length=8, verbose_name='员工号', unique=True)
    
class ProjectUser(models.Model):  
    # user 和 invitee 两字段都 关联 到 UserInfo 表
    # 直接使用 obj.projectuser_set.all() 会报错,不清楚从哪个字段反向查询数据
    # 需要增加 related_name 属性
    user = models.ForeignKey(verbose_name='参与者', to='UserInfo', on_delete=models.CASCADE, related_name = 'a')
    invitee = models.ForeignKey(verbose_name='邀请者', to='UserInfo',on_delete=models.CASCADE, related_name = 'b')
    

# 从UserInfo表中查询id=1的对象
obj = UserInfo.objects.filter(id=1)
# 如果要反向关联查询 user 字段:
obj.a.all()
# 如果要反向关联查询 invitee 字段:
obj.b.all()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值