将邮件标记为已读Django

时间:2020-06-25 16:13:01

标签: python django view model

我有一条与用户有关的模型消息:

class Message(models.Model):
    content = models.TextField(verbose_name='content')
    msg_to = models.ForeignKey(User, related_name='message_to', on_delete=models.CASCADE)
    msg_from = models.ForeignKey(User, related_name='message_from', on_delete=models.CASCADE)
    creation_date = models.DateTimeField(auto_now_add=True)
    read = models.BooleanField(default=False)

当用户可以看到消息时,还具有一个URL:

path('message/<int:msg_id>', ex_views.MessageView.as_view(), name="message"),

如果要发送消息的用户如何将消息模型中的“已读”更改为“真”,请打开包含特定消息的链接?

例如,我有一条消息id = 2,它已发送给user1, user1单击/打开链接:message / 2,并自动读取对True的更改。

4 个答案:

答案 0 :(得分:1)

我这样做是这样的:(无帖子,但可行)

class MessageView(LoginRequiredMixin, View):

    def get(self, request, msg_id):
        message = Message.objects.get(id=msg_id)
        current_user = request.user
        if message.msg_to_id == current_user.id:
            message.read = True
            message.save()
        return render(request, "twitter/message.html", locals())

答案 1 :(得分:0)

在视图中,使用request.user获取当前用户,并检查它是否与消息所有者相同-如果要发布视图,请执行read=True,我可以帮助您编写代码。

答案 2 :(得分:0)

您应该在views.py中执行此操作。每当他们向该页面发出请求时,您只需将read字段更改为true。下面是我的意思的简单骨架。

views.py

def message_view(request, message_id):
    message = Message.objects.get(id=message_id)
    message.read = True
    message.save()

    return render(request, 'template.html')

基本上,我在这里所做的就是通过使用传递的ID查询数据库,然后将读取字段更改为true,然后保存对象并返回html,来获取他们单击的消息。

答案 3 :(得分:0)

让我们假设您的MessageView像下面的示例一样希望对您的要求有所帮助

class MessageView(generics.ListCreateAPIView):
  permission_classes = [AllowAny]
  parser_classes = (MultiPartParser,FormParser,JSONParser)
  def post(self, request, format=None):
    msg_id = request.data.get('msg_id')
    message = Message.objects.get(id=msg_id)
    if message:  
        message.read = True  
        message.save() 
        message_response = MessageView().post(request)
        return message_response
    else:  
        return Response({'request_status': 0, 'msg': "fail to read msg."}, status=status.HTTP_400_BADREQUEST)

这只是一个示例,您还可以修改其他情况并进行更新