在我的PostDetailView中,我试图显示与PostDetailView中的帖子相关的游戏的先前帖子。我不确定如何在PostDetailView中按游戏过滤Post
class Game(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
cover = models.ImageField(upload_to='cover_images')
class Post(models.Model):
author = models.ForeignKey(User, models.SET_NULL, blank=True,
null=True, ) # If user is deleted keep all updates by said user
article_title = models.CharField(max_length=250, help_text="Use format: Release Notes for MM/DD/YYYY")
content = models.TextField()
date_published = models.DateTimeField(db_index=True, default=timezone.now,
help_text="Use date of update not current time")
game = models.ForeignKey(Game, on_delete=models.CASCADE)
Views.py
class PostDetailView(DetailView):
model = Post
编辑:
我仅在PostDetailView中显示一个帖子。但是从侧面看,我想列出与PostDetailView中的帖子相同的游戏(ForeignKeyed进入游戏模型)中同一游戏中所有以前的帖子(此链接将链接到该帖子的新的postdetailview)
答案 0 :(得分:1)
您可以通过get_context_data
在模板上下文中包括其他元素。您可能需要更改获取相关产品的方式,但这显示了基本思想。
class PostDetailView(DetailView):
model = Post
queryset = Post.objects.select_related('game')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'related': self.get_object().game.post_set.all()
})
return context
答案 1 :(得分:0)
您可以使用:
game = Post.objects.filter(game__title__contains = "Name of the game")
无论如何,就像其他人在评论中说的那样,您不能为此使用DetailView(因为只能通过url索引一个对象),但是可能希望使用ListView或基于简单函数的视图>
答案 2 :(得分:0)
从头开始编写您自己的视图,而不是DetailView,然后将“游戏”和“帖子”加载到其中。
此外,您对Post类的缩进应与Game类的缩进程度相同。