在Django中, 外键字段的related_name参数用于定义反向关系的名称.
默认情况下, 当你为模型定义了一个外键关系时, Django会为你创建一个反向关系,
但这个反向关系的名称是根据模型名和字段名自动生成的, 有时候这样的名称并不直观或者不符合我们的编码习惯.
使用related_name可以让我们自定义这个反向关系的名称.
假设我们有两个模型, 一个是Person, 另一个是Vocation, Person模型有一个指向Vocation模型的外键字段name.
如果我们想要设置related_name为personinfo, 那么我们可以这样定义Person模型:
from django.db import models
class Vocation(models.Model):
pass
class Person(models.Model):
name = models.CharField(max_length=100)
vocation = models.ForeignKey(Vocation, on_delete=models.CASCADE, related_name='personinfo')
在这个例子中, Person模型中的vocation字段是一个外键, 指向Vocation模型, 并设置了related_name='personinfo'.
这意味着我们可以通过Vocation模型的实例访问与之相关联的所有Person实例, 使用.personinfo.all()或.personinfo.first()等方法.
现在, 让我们看看如何使用这个related_name:
v = Vocation.objects.get(id = some_id)
p_related_to_v = v.personinfo.first()
if p_related_to_v:
job = p_related_to_v.job
else:
pass
在上面的代码中, v.personinfo.first()会返回与v这个Vocation实例相关联的Person查询集中的第一个对象.
如果Person模型有一个job字段, 我们就可以通过p_related_to_v.job来访问它.
注意, 如果查询集中没有对象, first()会返回None, 因此在实际使用中需要检查p_related_to_v是否为None.