You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Rest Framework中批量更新通知为已读状态?

解决方案

你可以直接在get方法中添加批量更新逻辑,在返回通知列表前,将当前用户的所有未读通知标记为已读。Django的QuerySet提供了update()方法,可以高效完成批量字段修改,不需要逐个实例操作。

修改后的视图代码如下:

class UserNotificationView(ListModelMixin, GenericAPIView, CreateModelMixin):
    serializer_class = NotificationSerializer

    def get_queryset(self):
        notification_to = self.kwargs["notification_to"]
        return Notification.objects.filter(notification_to=notification_to)

    def get(self, request, *args, **kwargs):
        # 批量更新当前用户的未读通知为已读
        notification_to = self.kwargs["notification_to"]
        Notification.objects.filter(notification_to=notification_to, is_read=False).update(is_read=True)
        # 再返回通知列表
        return self.list(request, *args, **kwargs)

补充说明

  • 使用update()方法会直接生成一条SQL UPDATE语句,比循环每个通知实例调用save()效率高得多,尤其当通知数量较多时优势明显。
  • 如果需要更灵活的处理(比如记录标记时间、触发其他业务逻辑),可以先获取未读通知的QuerySet,循环处理后批量保存,但这种场景下update()已经足够满足需求。
  • 确保notification_to参数是当前登录用户的Profile ID,避免越权修改其他用户的通知状态(如果你的视图没有做权限校验,建议添加权限控制逻辑)。

内容的提问来源于stack exchange,提问作者ILYASEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:18:18