Доступ к совпадающей записи двух моделей с помощью ForeignKey

У меня есть три модели: модель игры, модель дистрибьютора и модель отношения. Модель Relation имеет два ForeignKeys. Один ссылается на модель игры, а другой на модель дистрибьютора. Мне нужно получить доступ по шаблону (в одном и том же представлении) к данным из модели игры и из модели отношения для соответствующей записи.

Models.py

class Game(models.Model):
    name = models.CharField(max_length=100, unique=True)
    

class Distributor(models.Model):
    dist = models.CharField(max_length=30, unique=True)


class Relation(models.Model):
    game = models.ForeignKey('Game', on_delete=models.CASCADE)
    distributor = models.ForeignKey('Distributor', on_delete=models.CASCADE)

Views.py

class GameDetailView(DetailView):
    model = models.Game
    context_object_name = 'game_detail'
    template_name = 'gamesDB/game_detail.html'

    def get_context_data(self, **kwargs):
        context = super(GameDetailView, self).get_context_data(**kwargs)
        context.update({
            'game_status': models.Relation.objects.all()
        })
        return context

Я думаю, что моя точка зрения не верна. Но я не могу найти способ заставить его работать. Как я могу получить доступ по шаблону к данным из модели Relation для соответствующей игры, добавленной в модели Game? Заранее спасибо.

Из документации, с DetailView вы можете использовать self.object для получения Game экземпляра:

Во время выполнения этого представления, self.object будет содержать объект, над которым работает представление.

Затем вы можете отфильтровать следующим образом:

    def get_context_data(self, **kwargs):
        context = super(GameDetailView, self).get_context_data(**kwargs)
        context.update({
            'game_status': models.Relation.objects.filter(game=self.object)
        })
        return context

Или использовать этот экземпляр для получения всех связанных Relation, следуя отношениям backwards:

    def get_context_data(self, **kwargs):
        context = super(GameDetailView, self).get_context_data(**kwargs)
        context.update({
            'game_status': self.object.relation_set.all()
        })
        return context
Вернуться на верх