Как передать значения данной таблицы в шаблон на основе внешнего ключа в этой таблице, который связан со значением в другой таблице?
Я не уверен, что название является наиболее точным способом изложения моей проблемы, и я очень новичок в Django. Я отображаю записи о скоростном беге. Он настроен так, что пользователи могут вводить информацию о своей записи в форме, с выпадающим меню для игры, которая является внешним ключом к объекту GameName. Если игра не была указана, они вводят ее на отдельной странице. Я хотел, чтобы люди могли добавлять свои игры, потому что их слишком много, чтобы я мог перечислить их за то короткое время, которое у меня есть на это.
У меня есть страница, на которой отображаются все игры, введенные в БД на данный момент. Когда пользователь нажимает на название игры, я хотел бы перенаправить его на страницу, где перечислены все записи, введенные для этого названия игры. Вот здесь у меня возникают проблемы. Мне нужно создать функцию представления, которая может заполнить html-таблицу всеми соответствующими значениями из моего объекта Record, но на основе названия игры, найденного в таблице GameName dB. Я не могу придумать правильную функцию для вывода всех записей/строк из объекта Record, которые соответствуют определенному имени игры/GameName pk.
models.py
class GameName(models.Model):
game_name = models.CharField(max_length=60, default="")
objects = models.Manager()
def __str__(self):
return self.game_name
PLATFORM_CHOICES = {...}
class Record(models.Model):
player = models.CharField(max_length=60, default="")
game = models.ForeignKey(GameName, related_name='records', on_delete=models.CASCADE)
time = models.CharField(max_length=30, default="HH:MM:SS")
platform = models.CharField(max_length=60, choices=PLATFORM_CHOICES, default="")
date = models.DateField(default=date.today)
objects = models.Manager()
def __str__(self):
return self.player
Моя функция views.py дает мне проблему:
def game_record(request, pk):
gamename = get_object_or_404(GameName, pk=pk)
records = Record.objects.filter('game__game_name')
content = {'gamename': gamename, 'records': records}
return render(request, 'speed_run_game_records.html', content)
Который возвращает ошибку слишком большого количества значений для распаковки. Это лишь последняя из многих попыток сделать это правильно.
Также пробовали:
records = Record.objects.filter('game')
Которая вернула ошибку Record not being iterable.
Также пробовали:
records = Record.objects.select_related('game')
Который также вернул ошибку Record not being iterable.
Я также использовал related_name='records', заменив его на 'game'.
Если это поможет, вот мой шаблон:
{% extends 'speed_run_base.html' %}
{% load static %}
{% block title %}{{ gamename.game_name }} Records{% endblock %}
{% block content %}
<h1 class="homeHeading">{{ gamename.game_name }}</h1>
<div class="table-container">
<table class="table">
<thead>
<tr class="tHead">
<th>Player</th>
<th>Time</th>
<th>Platform</th>
<th>Date</th>
</tr>
</thead>
{% for record in records %}
<tbody>
<tr class="tBody">
<td>{{ records.name }}</td>
<td>{{ records.time }}</td>
<td>{{ records.platform }}</td>
<td>{{ records.date }}</td>
</tr>
</tbody>
{% endfor %}
</table>
</div>
{% endblock %}
Любая помощь будет очень признательна.
Хм, вместо:
gamename = get_object_or_404(GameName, pk=pk)
records = Record.objects.filter('game__game_name')
Вы пробовали следующее?
gamename = get_object_or_404(GameName, pk=pk)
records = Record.objects.filter(game=gamename)