Django通知系统

时间:2017-09-18 01:38:03

标签: python django

所以我试图在django为我的学校项目建立一个通知系统。

我想通知用户是否有人回答了我正在做这样的事情的问题

answers = Answer.objects.filter(question__user=request.user).order_by('-id')

这是通知用户的简单方法。此外,用户不会知道自上次登录后收到的新通知。

这是“通知应用”的模型,

class Notifs(models.Model):
    user = models.ForeignKey(User)
    timestamp = models.DateTimeField(null=True, blank=True)

为了做到这一点,我尝试这样的事情,我保存最后一次用户打开通知页面&将这个时间与回答时间进行比较。因此,如果用户自上次打开页面后收到了答案,我想通知他们。

在视图中我尝试这样的事情,

def notifications(request):
new = Notifs.objects.filter(user=request.user)
if new:
    new.update(timestamp=timezone.now())
else:
    Notifs.objects.create(user=request.user, timestamp=timezone.now())

last_seen = ???
count = Answer.objects.filter(question__user=request.user, timestamp__gte=last_seen).count()

我不确切地知道如何比较用户打开通知页面后的时间&从那时起,有人回答了他的问题。怎么办?

请帮助。谢谢:)

2 个答案:

答案 0 :(得分:0)

在你的答案模型中,确保你有一个这样的字段:

created = models.DateTimeField(auto_now_add=True)

这将跟踪新条目的创建时间,并且您不需要做任何事情来设置字段,因为它会自动执行。

一旦你有了这个,我假设你的timestamp字段是存储上次检查通知的时间,你会做这样的事情:

last_checked = Notifs.objects.get(user=user).values_list('timestamp', flat=True)

要获取新通知,您可以执行以下操作:

answers = Answer.objects.filter(question__user=request.user, created__gte=last_checked).order_by('-id')

答案 1 :(得分:0)

您好我对通知模型设计有一些建议

class Notify:
   user = models.ForeignKey(User)  // User
   updated_at = models.DateTimeField(auto_now=True) // Which sets to time automatically when the objecct is last updated 
   read = models.BooleanField(default=False) // Which should be changed to true everytime user view the notification

您需要导入Q ,您可以通过以下内容查询每个用户的未读通知

Notifs.objects.filter(Q(user=user)&Q(read=False))