首页 > 解决方案 > 如何覆盖 Django 多对多字段 add() 和 remove() 方法

问题描述

我正在尝试使用Django-Activity-Stream设置类似 Facebook 的活动通知系统。

该库action为创建动作提供了一个特殊的信号。根据文档,要触发这个action

您可以通过自定义表单或覆盖预定义的模型方法(例如Model.save(). 逻辑是简单地导入动作信号并将其与您的演员、动词、目标和任何其他重要参数一起发送。例如,action.send(request.user, verb='reached level 10')

但是,我有一个中间直通模型,action必须从中发送信号。由于在使用Model.save()M2Madd()remove()方法时不会调用方法,所以我想知道是否有任何方法可以覆盖这些add()remove()方法

我曾考虑过使用 M2M 更改信号,但很快意识到我无法轻松访问 M2M 更改信号中的 request.user。(我需要始终知道谁 request.user 来生成任何有用的活动通知)。我担心在信号中访问用户实例(例如,通过创建单独的中间件来将 request.user 存储在线程中)可能成本高昂且不安全。如果这是一个可靠的选择,请告诉我。

标签: djangodjango-rest-frameworkdjango-signalsmanytomanyfielddjango-activity-stream

解决方案


推荐阅读