Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ForeignKey:可以要求姓名而不是id吗?_Python_Django_Dictionary_Django Models_Django Views - Fatal编程技术网

Python Django ForeignKey:可以要求姓名而不是id吗?

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")

我的问题是关于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.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()