Django Forum App,评论不会在用户端更新,但可以通过管理员查看

Django Forum App, comments don't update on user-side, but can be seen through admin

作为参考,以下是我的论坛应用程序中的模型:

class Forum(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('forum-detail', kwargs={'pk': self.pk})


class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    forum = models.ForeignKey(Forum, on_delete=models.CASCADE)
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

为了显示论坛 posts,我有一个 CBV 'ForumListView':

class ForumListView(ListView):
    model = Forum
    template_name = 'forum/forum.html'
    context_object_name = 'forum_posts'
    ordering = ['-created_at']

从这个列表中,用户可以点击任何论坛,这将引导他们进入 'forum-detail',CBV 'ForumDetailView':

class ForumDetailView(DetailView):
    model = Forum

    extra_context = {
        'comments': Comment.objects.all().order_by('-created_at')}

这里是我从我的 Comment 模型中传递评论的地方,将与 post 一起显示。 我认为这就是评论不更新的原因,但我不太确定如何解决这个问题。

在 forum_detail.html 的模板中,这是我显示所有评论的方式:

{% for comment in comments %}
        {% if comment.forum == forum %}
        <div class="content-section">
            <p>{{ comment.description }}</p>
            <small>{{ comment.user.username }}, on {{ comment.created_at|date:"F d, Y" }}</small>
        </div>
        {% endif %}
    {% endfor %}

请注意,如果我重新运行

,将显示评论
python manage.py runserver

有时 评论会在 waiting/refreshing 页面几分钟后出现。

另外,我认为基于函数的视图可能会解决这个问题,但是我已经用 CBV 对我的整个应用程序进行了编码,并且希望有一个不涉及重新编码所有内容的修复程序!

非常感谢任何帮助,如果需要,可以提供更多info/code!

像这样将它放在 extra_context 中将导致在定义视图时对查询集进行求值,并且它当时具有的任何值将是视图将获得的唯一值。这就是为什么它在您重新启动服务器时起作用的原因。所以它应该是动态的,每次有新请求时都会获取。在这种情况下,您需要将其放入 get_context_data

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['comments'] = Comment.objects.all().order_by('-created_at')}
    return context