gpt4 book ai didi

Django related_name 默认语法

转载 作者:行者123 更新时间:2023-12-03 10:25:21 27 4
gpt4 key购买 nike

根据 documentation ,相关名称必须是唯一的。再次根据 documentation 的默认值(如果开发人员未明确设置)是 FOO_set ,其中 FOO 是源模型名称。

因此,如果我有两个外键(当然,指向两个不同的模型),那么(默认)相关名称不会相似吗?

最佳答案

我想扩展 Willem Van Onsem 的出色回答。在他的例子中,类 C 与类 A 和 B 相关。因此 A 和 B 具有属性 c_set ,但它们是不同的类。因此,具有相同名称的属性 c_set 存在于不同的范围(命名空间)中。

但是如果关系是不同的性质呢?让我们看一个不同的例子。想象一个运动队的应用程序。我们有Person 和Team 类。一个人可以为一支球队效力,也可以执教一支球队。模型看起来像:

class Person(models.Model):
name = models.CharField(max_length=255, unique=True)


class Team(models.Model):
name = models.CharField(max_length=255, unique=True)
place = models.CharField(max_length=255)
players = models.ManyToManyField('Person')
coaches = models.ManyToManyField('Person')

现在这应该为类 Person 创建一个属性 team_set :
person = Person.objects.get(pk=1)
# now we want to get the teams where the person participates
person.team_set.all()

问题来了!应该使用哪个关系 - playerscoaches ? Django 不允许这样做并要求明确声明相关名称。

我们可以通过声明相关名称来解决问题,例如:
players = models.ManyToManyField('Person', related_name='plays_in_teams')
coaches = models.ManyToManyField('Person', related_name='trains_teams')

进行此更改后,我们可以查询团队,例如:
person.plays_in_teams.all()
person.trains_teams.all()

这显示了相关名称的用处。它们有助于创建人类可读的查询并提高代码的可维护性。

关于Django related_name 默认语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51702211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com