我的问题是关于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)
现在,当我打电话时,有没有办法获取团队名称而不是id:
Matches.objects.filter(day=1).values()
作为替代方案: 有没有办法在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
在我打电话时把它们放进字典里:
Matches.objects.filter(day=1).values()
注意: 我想将团队ID作为外键。 我需要在字典中拥有团队名称,因为我想传递给模板的是团队名称而不是团队ID。 我知道我可以在视图中使用想要的信息构建一个新的字典,将字典传递给模板,但是如果有一种方法可以在模型级别使用一些django技巧,那就更好了。
谢谢。
答案 0 :(得分:2)
正如bruno所提到的,您可以将对象直接传递给模板。但是,使用values()
也可以选择确定字典值的含义。例如:
Matches.objects.filter(day=1).values('team_home__name','team_away__name')
答案 1 :(得分:1)
"我需要在字典中拥有团队名称,因为我想要的是 传递给模板的是团队名称,而不是团队ID"
为什么要将dicts传递给模板? Django模板只适用于任何Python对象,包括模型和查询集 - 实际上这是最常见的模式。
答案 2 :(得分:0)
如果您所有这一切的目标只是为了能够从模板中访问团队名称,那么您不必在模型或视图中编写任何其他代码来实现这一目标。
当您在视图中查询Matches.objects.filter(day=1)
并将其作为matches
包含在模板的上下文中时,您应该能够访问模板中的团队名称,如下所示:
{% for match in matches %}
Home team is {{match.team_home.name}} and away team is {{match.team_away.name}} <br>
{% endfor %}