Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何记录从应用程序而不仅仅是从django管理员进行的所有数据库更改。_Django_Django Models_Django Admin - Fatal编程技术网

如何记录从应用程序而不仅仅是从django管理员进行的所有数据库更改。

如何记录从应用程序而不仅仅是从django管理员进行的所有数据库更改。,django,django-models,django-admin,Django,Django Models,Django Admin,我想记录从应用程序而不仅仅是从django管理员所做的所有数据库更改。我怎样才能做到这一点?目前,我们只能在django admin中看到通过管理界面所做更改的历史记录。我需要为此定义信号吗?有两种可能的更改类型 如果您关心数据库中的结构更改,它们将保存在应用程序目录中的migrations文件夹中 如果您想根据数据库中的条目记录数据库更改,您可能会发现python包django audit log很有用。您可以通过pip进行安装,安装后,您可以通过以下操作将跟踪器添加到您的模型中: from

我想记录从应用程序而不仅仅是从django管理员所做的所有数据库更改。我怎样才能做到这一点?目前,我们只能在django admin中看到通过管理界面所做更改的历史记录。我需要为此定义信号吗?

有两种可能的更改类型

如果您关心数据库中的结构更改,它们将保存在应用程序目录中的
migrations
文件夹中

如果您想根据数据库中的条目记录数据库更改,您可能会发现python包
django audit log
很有用。您可以通过pip进行安装,安装后,您可以通过以下操作将跟踪器添加到您的模型中:

from audit_log.models.managers import AuditLog

class YourModelName(models.Model):
    #your model definition here
    audit_log = AuditLog()
你可以找到这些文件

另一种选择是允许您对模型实例进行版本控制


希望这有帮助

在settings.py中,我们必须启用日志记录。将此代码放在settings.py中

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, }, }, } 日志记录={ “版本”:1, “禁用现有日志记录器”:False, “处理程序”:{ “控制台”:{ “级别”:“调试”, 'class':'logging.StreamHandler', }, }, “伐木工人”:{ “django.db.backends”:{ “处理程序”:[“控制台”], “级别”:“调试”, "传播":对,, }, }, }
Django日志文档-

Django管理员使用
LogEntry.objects.log\u操作
记录这些历史更改。没有什么可以阻止您在自己的代码中调用相同的方法来记录在其他地方所做的更改

您可以使用
pre_save
信号在提交到数据库之前获取对象,然后从数据库中获取旧值以比较和检查更改


消息的格式可以是普通字符串,但管理员将其设置为JSON格式,以便对其进行翻译。您可以查看
construct\u change\u message
的源代码是
django.contrib.admin.utils
,如果您想继续在
ManyToManyField
等中使用JSON格式,那么您可以了解JSON格式。

我的自定义要求是还需要记录多对多字段的更改。我不认为这两个都能做到,实际上你能做到。去这个