为了账号安全,请及时绑定邮箱和手机立即绑定

如何在同一个 HTML 页面上显示来自两个不同模型的数据

如何在同一个 HTML 页面上显示来自两个不同模型的数据

犯罪嫌疑人X 2022-01-18 17:38:10
我有两个表,其中一个名为 called PlayerLkup,其中包含有关播放器的信息并用作查找表。我有另一个表(称为BattingStats),其中包含玩家的统计数据(和playerid)。该BattingStats表是一对多的(playerid被列出多次,他们玩的每个赛季一次)。我的数据PlayerLkup显示正常,它使用playeridURL 地址中的 检索特定播放器。我的问题是如何将BattingStats模型/表中的数据使用到同一页面上?我假设我的视图页面是需要完成工作的地方。有没有办法将多个模型传递到一个视图中?我试过相同的网址,不同的观点。它似乎对我不起作用。我需要做什么?这里的任何帮助将不胜感激。我之前发布了这个问题(并且已经删除了它)但是有人错误地将它标记为重复,所以它没有受到任何关注。模型.pyclass BattingStats(models.Model):    playerid = models.CharField(db_column='playerID', max_length=9)    year = models.IntegerField(db_column='Year', blank=True, null=True)    g = models.IntegerField(db_column='G', blank=True, null=True)    ab = models.IntegerField(db_column='AB', blank=True, null=True)    r = models.IntegerField(db_column='R', blank=True, null=True)    hr = models.IntegerField(db_column='HR', blank=True, null=True)    rbi = models.IntegerField(db_column='RBI', blank=True, null=True)    sb = models.IntegerField(db_column='SB', blank=True, null=True)视图.pydef player_info(request, playerid):    playerdata = PlayerLkup.objects.get(playerid=playerid)    return render(request, 'careerstats/playerpage.html', {'playerdata': playerdata})网址.pyurlpatterns = [    path('player/<str:playerid>/', views.player_info, name='player_info'),
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您可以在视图中做任何您喜欢的事情,并在上下文中传递任意数量的模型。


但在您的情况下,您实际上并不需要更改视图,但您应该更改模型。看起来 BattingStats 应该通过该playerid字段与 PlayerLkup 建立关系。您应该将其设为 ForeignKey (并调用它player) - 请注意,您实际上根本不需要更改基础表,这可能很重要,因为这似乎是一个遗留数据库。


class BattingStats(models.Model):

    player = models.ForeignKey('PlayerLkup', db_column='playerID')

现在在您的模板中,您可以执行以下操作:


{{ playerdata.namefirst }}

{% for stat in playerdata.battingstats_set.all %}

  {{ stat.year }}

  {{ stat.g }}

  ... 

{% endfor %}

(另外,请为您的字段提供更好的名称。它们不需要与 db 列相同,这就是该db_column属性的用途。没有理由使用单字符字段名称,例如g.)


查看完整回答
反对 回复 2022-01-18
?
三国纷争

TA贡献1804条经验 获得超7个赞

万一您不想更改模型(我愿意),您可以:


def player_info(request, playerid):

    playerdata = PlayerLkup.objects.get(playerid=playerid)

    battingdata = BattingStats.objects.get(playerid=playerid)

    data = {

         'playerdata': playerdata,

         'battingdata': battingdata

    }

    return render(request, 'careerstats/playerpage.html', data)

在您的模板,你将两者playerdata并battingdata可以作为模板变量。


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 360 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信