DjangoForeignKey:是否可以要求提供名称而不是ID?

foe*_*ebu 2 python django dictionary django-models django-views

我的问题是关于 django 模型和外键。我搜索了类似的问题,但似乎没有找到。

我的模型如下:

class Matches(models.Model):
    day = models.ForeignKey('Day')
    team_home = models.ForeignKey('Team', related_name="home_set")
    team_away = models.ForeignKey('Team', related_name="away_set")
    golH = models.IntegerField(null=True)
    golA = models.IntegerField(null=True)

class Team(models.Model):
    league = models.ForeignKey('League')
    manager = models.ForeignKey(User)
    name = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法在我调用时获取团队的名称而不是 id:

Matches.objects.filter(day=1).values()
Run Code Online (Sandbox Code Playgroud)

作为替代方案:有没有办法在 Matches 类中添加两个属性,例如: class Matches(models.Model): ...

def team_home_name(self)
    return self.team_home.name

def team_home_away(self)
    return self.team_away.name
Run Code Online (Sandbox Code Playgroud)

当我打电话时将它们放入字典中:

Matches.objects.filter(day=1).values()
Run Code Online (Sandbox Code Playgroud)

注意:我想将团队 ID 保留为外键。我需要在字典中包含团队名称,因为我想要传递给模板的是团队名称而不是团队 ID。我知道我可以在将字典传递给模板的视图中使用所需信息构建一个新字典,但如果有一种方法可以在模型级别使用一些 django 技巧来做到这一点,那就更好了。

谢谢。

Ank*_*wal 5

正如布鲁诺提到的,您可以将对象直接传递给模板。然而,使用values()也可以选择决定什么是字典值。例如:

Matches.objects.filter(day=1).values('team_home__name','team_away__name')
Run Code Online (Sandbox Code Playgroud)