我有两个表,一个称为PlayerLkup
,其中包含有关播放器的信息并用作查找表。我还有另一个表(称为BattingStats
),其中包含玩家的状态(和playerid
)。这张BattingStats
表是一对多的(playerid
被列出多次,每个赛季打一次)。
我的数据PlayerLkup
显示正常,并且正在使用playerid
URL地址中的来检索特定播放器。我的问题是如何使用BattingStats
模型/表中的数据到同一页面上?我假设我的视图页面是需要完成的工作。有没有一种方法可以将多个模型传递到一个视图中?我试过相同的网址,不同的看法。它似乎没有为我工作。我需要做什么?在这里的任何帮助,将不胜感激。
我之前曾发布过此问题(并已将其删除),但有人错误地将其标记为重复,因此没有引起任何注意。
models.py
class 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)
class PlayerLkup(models.Model):
playerid = models.CharField(db_column='playerID', primary_key=True, max_length=255)
birthyear = models.IntegerField(db_column='birthYear', blank=True, null=True)
birthmonth = models.IntegerField(db_column='birthMonth', blank=True, null=True)
birthday = models.IntegerField(db_column='birthDay', blank=True, null=True)
birthstate = models.CharField(db_column='birthState', max_length=255, blank=True, null=True)
birthcity = models.CharField(db_column='birthCity', max_length=255, blank=True, null=True)
namefirst = models.CharField(db_column='nameFirst', max_length=255, blank=True, null=True)
namelast = models.CharField(db_column='nameLast', max_length=255, blank=True, null=True)
weight = models.IntegerField(blank=True, null=True)
height = models.IntegerField(blank=True, null=True)
views.py
def player_info(request, playerid):
playerdata = PlayerLkup.objects.get(playerid=playerid)
return render(request, 'careerstats/playerpage.html', {'playerdata': playerdata})
urls.py
urlpatterns = [
path('player/<str:playerid>/', views.player_info, name='player_info'),
您可以在视图中执行任何操作,并在上下文中传递任意数量的模型。
但是在您的情况下,您实际上不需要更改视图,但是应该更改模型。看起来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
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句