Как передать значения данной таблицы в шаблон на основе внешнего ключа в этой таблице, который связан со значением в другой таблице?

Я не уверен, что название является наиболее точным способом изложения моей проблемы, и я очень новичок в 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)
Вернуться на верх