自用户上次登录Django以来如何检查新帖子

Posted

技术标签:

【中文标题】自用户上次登录Django以来如何检查新帖子【英文标题】:How to check new posts since users last login Django 【发布时间】:2019-05-16 21:06:57 【问题描述】:

简介:我有 3 个模型 userpostgroup。用户可以发布帖子,但是每个帖子必须属于一个组。用户必须从现有组中选择他们的帖子。用户无法添加、删除、更新群组。

此外:

用户可以成为组的成员,当他们点击某个组时。他们会看到该组中的所有帖子。

我想要什么当用户进入主页时,他们会看到自上次登录以来添加的帖子

我的模型

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    group = models.ForeignKey(Group, related_name='posts')
    title = models.CharField(max_length=250, unique=True)
    message = models.TextField()
    created_at = models.DateTimeField(auto_now=True)

我的观点

class Homepage(TemplateView):
    template_name = 'home.html'

    def get_context_data(self, **kwargs):
        context = super(Homepage, self).get_context_data(**kwargs)
        context['object_list'] = Group.objects.all()
        context['post_list'] = Post.objects.order_by("-created_at")

        #What am I doing wrong in the below code
        if self.request.user.is_authenticated(): 
             new_posts = Post.objects.filter(created_at__gt(self.request.user.last_login))
             context['new_posts'] = new_posts.count()
        return context

在我的模板中

<div class="list-group">
        % for group in object_list %            
            group.name 
            % if new_posts > 0 %        
            new_posts new
        % endfor %
</div>

NameError: name 'created_at__gt' 未定义

【问题讨论】:

【参考方案1】:

错误是因为你错过了一个等于符号

new_posts = Post.objects.filter(created_at__gt = self.request.user.last_login)
                                              ^^^ here

【讨论】:

做得真棒 过滤是正确的,但实际上这应该不起作用?当用户登录时,last_login 设置为 now,运行上面的过滤器应该不会产生任何帖子,因为它们都是在现在之前发布的?我们不需要previous_login 来执行此操作吗?

以上是关于自用户上次登录Django以来如何检查新帖子的主要内容,如果未能解决你的问题,请参考以下文章

Git:如何将自上次提交以来的更改移动到新分支

如何在管理面板中第一次登录django员工用户?

检查自上次检查以来是不是有匹配单位的时间

如果自上次事件以来传感器读数没有更改,则如何在未发送传感器读数时计算窗口上的聚合?

跟踪自上次尝试______以来的时间

如何在用户个人资料页面中将用户发布的博客显示为 Django 3 中的我的帖子列表部分?