跟踪哪个用户更新了任何模型的哪些字段?

Track Which user has updated which fields of any models?

如何记录哪个用户在任何模型中执行了哪些更改(字段值)?

我尝试的方式:

  1. 在pre_save信号中写入代码。在那里,我得到了旧值和新值,但是请求对象(对于当前登录用户)和更新字段列表没有得到。

  2. 在Django Forms save()中写代码,但同样的问题可以获取请求对象(当前登录用户)。

您可以考虑使用 django-simply-history [readthedocs]。您可以将此应用程序添加到 INSTALLED_APPSMIDDLEWARE:

# settings.py

INSTALLED_APPS = [
    # ...
    <b>'simple_history'</b>,
    # ...
]

MIDDLEWARE = [
    # ...
    <b>'simple_history.middleware.HistoryRequestMiddleware'</b>,
    # ...
]

中间件然后用于跟踪触发导致模型更改的视图的用户 "with a history"。

您可以将历史管理器添加到模型中,例如:

from django.db import models
from simple_history.models import <b>HistoricalRecords</b>

class SomeModel(models.Model):
    some_field = models.CharField(max_length=128)
    history = <b>HistoricalRecords()</b>

它将添加 SomeModel 的副本,其中包含时间戳和对在额外 table 中进行更改的用户的引用。

有关详细信息,请参阅 User tracking section [readthedocs]

您也可以考虑django-dirtyfields

这使您可以获取自模型实例化以来已更改的字段值的字典。您可以子类化模型 save 方法,并将当前用户和更改的字段写入日志文件或保存日志模型。它还将允许您决定可能字段的子集或对其所做的更改值得记录,并忽略其他更改。