Доступ к совпадающей записи двух моделей с помощью 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