要使用信号还是覆盖模型保存方法?

时间:2013-03-26 14:21:43

标签: django django-signals

简单的用例: 用户更新记录后,我想获取更改的字段并将其保存在历史记录表中。我正在使用django-ditryfields来抓住这段历史。所以我的思考过程是使用pre_save信号来获取所有“脏”字段,并将它们存储在我的历史表中。

问题是我在使用信号时无法获得request.user。我需要这个来查看哪个用户对记录进行了更改。我的另一个想法只是覆盖我的模型的保存方法,但我也无法直接从模型中获取request.user。我必须使用视图中的用户信息发送** kwarg ['user']来获取此信息。这很好,但我将从代码周围的许多不同地方进行保存调用。每次编辑对象时,我都不想继续传递request.user。这就是为什么我喜欢有一个点,如信号,来处理所有这些。也许是一些我不熟悉的中间件?

有没有更好的方法来实现这样的目标?

1 个答案:

答案 0 :(得分:0)

您无法从信号中访问用户对象。 您可以考虑使用此第三方软件包:django-requestprovider来访问信号中的请求对象。

另一种方法是覆盖模型的保存方法。