The Setup:

  • 我正在开发一个Django应用程序,它允许用户在数据库中创建对象,然后根据需要返回并编辑它.
  • Django的管理站点保存通过管理站点对对象所做更改的历史记录.

The Question:

  • 如何将我的应用程序连接到管理网站的更改历史记录中,以便查看用户对其"内容"所做更改的历史记录?

推荐答案

管理历史只是一个像任何其他Django应用程序一样的应用程序,除了在管理网站上的特殊放置.

该模型位于django.contri.admin.Models.LogEntry中.

当用户进行更改时,像这样添加到日志(log)中(无耻地从contrib/admin/options.py窃取:

from django.utils.encoding import force_unicode
from django.contrib.contenttypes.models import ContentType
from django.contrib.admin.models import LogEntry, ADDITION
LogEntry.objects.log_action(
    user_id         = request.user.pk, 
    content_type_id = ContentType.objects.get_for_model(object).pk,
    object_id       = object.pk,
    object_repr     = force_unicode(object), 
    action_flag     = ADDITION
)

其中object当然是被更改的对象.

现在我看到了丹尼尔的回答,并同意他的看法,这是相当有限的.

在我看来,更好的方法是在他的书Pro Django中使用Marty Alchin的代码(参见从第263页开始的Keeping Historical Records).存在实现和扩展该方法的应用程序django-simple-history(docs here).

Django相关问答推荐

升级到4.2时,获取默认文件存储/存储是互斥的

Django中每个类型/代理的最新行

错误``Forbidden (403) CSRF 验证失败.请求中止.``` 当try 登录管理员时

在 Django 中重组多对多字段

`.objects` 属性在哪里添加到 Django 的 models.Model 类中的实例命名空间?

Django授权判断具有通配符模式的URL

QuerySet对象在bulk_update中没有属性pk

用于测试文件下载的 Django 单元测试

如何在 Django 测试框架中修改会话

如何在 Django 中向 ModelForm 添加外键字段?

Django - 如何从模型中 Select 特定列?

django 模板中对象的模型名称

在 Django shell 启动时自动导入模型

过滤 Django 数据库中包含数组中任何值的字段

如何过滤(或替换)在 UTF-8 中占用超过 3 个字节的 unicode 字符?

暂时禁用 Django 缓存

Django 模型方法 - create_or_update

为整个结果集向 Django Rest Framework 结果添加额外数据

如何将类、id、占位符属性添加到 django 模型表单中的字段

如何使用 Django/nginx 部署仅限 HTTPS 的站点?