详细视图内相关的先前帖子

时间:2019-03-26 18:33:04

标签: django

在我的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)

3 个答案:

答案 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类的缩进程度相同。