Python Django ForeignKey:可以要求姓名而不是id吗?
我的问题是关于django模型和外键的。我搜索了一个类似的问题,但似乎没有找到 我的模型如下:Python Django ForeignKey:可以要求姓名而不是id吗?,python,django,dictionary,django-models,django-views,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")
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.objects.filter(day=1).values()
作为替代方案:
是否有方法在Matches类中添加两个属性,类似于:
类匹配(models.Model):
当我打电话给你时,把它们记在字典里:
Matches.objects.filter(day=1).values()
Matches.objects.filter(day=1).values()
注:
我想保留团队id作为外键。
我需要在字典中包含团队名称,因为我要传递给模板的是团队名称,而不是团队id。
我知道我可以在视图中使用想要的信息构建一个新的字典,并将字典传递给模板,但是如果有一种方法可以在模型级别使用一些django技巧来实现这一点,那就更好了
多谢各位
“我需要在字典中输入团队名称,因为我想
传递给模板的是团队名称,而不是团队id“
为什么要将dict传递给模板?Django模板只适用于任何Python对象,包括模型和查询集-事实上,这是最常见的模式。正如bruno提到的,您可以将对象直接传递给模板。但是,使用
values()
也可以选择字典中的值。例如:
Matches.objects.filter(day=1).values('team_home__name','team_away__name')
如果您的目标只是能够从模板中访问团队名称,那么您不必在模型或视图中编写任何其他代码来实现这一点 当您在视图中查询
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 %}
{%用于匹配项中的匹配项%}
主队是{match.team_Home.name}而客队是{{match.team_away.name}}
{%endfor%}
你可以使用值('team_home__name'),它应该可以工作。如果我想传递一个对象列表呢?这基本上是我想要的,但我不知道为什么,这个{{matches}}{%for matches in matches%}team home是:{{match.team_home.name}{%endfor%}
在html页面上不会产生任何结果。将结果匹配为查询集。可能是因为您的查询集为空?如果我没有大错特错的话,这不是空的,因为我在传递到模板之前调用视图时正在打印它,我看到了我应该看到的内容,即特定日期的4个匹配项。您是否取消了.values()
在您的视图中?那么匹配.objects.filter(day=1)
而不是匹配.objects.filter(day=1).values()
?