如何在 django 中过滤其主要对象后显示详细对象?
Posted
技术标签:
【中文标题】如何在 django 中过滤其主要对象后显示详细对象?【英文标题】:How to display detail objects after filtering their primary object in django? 【发布时间】:2019-09-10 09:54:54 【问题描述】:我正在开发一个可以创建团队的应用程序,球员,我现在正在显示由外键球队连接的球员对象,这些球队显示相关球员到他们的球队。但我遇到的问题是球员对象显示在详细视图,显示所有播放器,而应显示特定播放器对象。请帮我解决问题。
这里是html
% include 'games_app/base.html' %
% block body_block %
<div>
% for players in play.teams.all %
<h1>Players :<strong>players.player_name</strong></h1>
<h1>Players-age :<strong>players.player_age</strong></h1>
<h1>Players-form :<strong>players.player_form</strong></h1>
<h1>Players-over :<strong>players.over</strong></h1>
<h1>Players-batting :<strong>players.batting</strong></h1>
<a href="% url 'games_app:players_update' players.pk %">Edit Player</a></br>
<a href="% url 'games_app:players_delete' players.pk %">Delete Player</a>
% endfor %
</div>
% endblock %
这里是详细玩家的views.py
def Detail_Players(request,pk):
model = models.Team.objects.get(pk=True)
template_name = 'games_app/players_detail.html'
return render(request, template_name, context=model)
[已解决] 我刚刚更改了模型和其他细节。
【问题讨论】:
【参考方案1】:你应该试试这个:
model = models.Team.objects.get(pk=pk)
然后以正确的方式将上下文传递给模板。
【讨论】:
正确设置上下文是什么意思 按照你说的做之后,我得到团队匹配查询不存在。 所以你想要一个在你的数据库中不存在的pk。 你想使用 play.teams.all 但没有在你的视图中声明 它存在,但我不知道为什么它给我这个错误【参考方案2】:看起来您将 pk 设置为 True 而不是 pk。
model = models.Team.objects.get(pk=True)
应该是
model = models.Team.objects.get(pk=pk)
【讨论】:
我收到一个错误,然后团队匹配查询不存在。 我刚刚解决了这个问题,将模型设置为 Players 然后显示数据,这是一个愚蠢的错误,但非常棘手。 :)【参考方案3】:在views.py 中创建detailview 的最简单方法如下:
from django.views import generic
class DetailView(generic.DetailView):
model = Team
template_name = 'games_app/players_detail.html'
那么在 urls.py 中,Pk 应该作为变量传递,以确定你想去哪个玩家:
path('<pk>/detail', views.DetailView.as_view(), name='detail'),
然后在您的模板中通过您的 for 循环使用方法“设置”,如下所示:
% for player in team.player_set.all %
....
【讨论】:
以上是关于如何在 django 中过滤其主要对象后显示详细对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在ListAPIView中使用django-filter对过滤结果进行排序