我有一条与用户有关的模型消息:
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的更改。
答案 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)
这只是一个示例,您还可以修改其他情况并进行更新