一个django应用程序,用于为管理中的模型添加对象工具
dj-obj-update的Python项目详细描述
dj-obj-update是一个模块,在更新 对象:
- 只有在发生更改时才进行保存
- 记录更改的内容(记录器名称为obj_update,仅输出debug)
安装
pip install dj-obj-update
用法
更新对象
from obj_update import obj_update new_data = { 'flavor': 'chocolate', } for obj in queryset: obj_update(obj, new_data)
更新对象的干运行
from obj_update import obj_update logger.setLevel(logging.DEBUG) # see "Logging changes" below new_data = { 'flavor': 'chocolate', } for obj in queryset: obj_update(obj, new_data, update_fields=[])
替代update_or_create
from obj_update import obj_update_or_create choice, created = obj_update_or_create( Choice, question=question, defaults={'choice_text': 'Flour or corn?'}, )
https://docs.djangoproject.com/en/stable/ref/models/querysets/#update-or-create
处理auto_now字段
默认情况下,dj-obj-update在保存时构造一个update_fields。 这意味着像主键auto_now和^{tt8}这样的字段$ 可能无法保存。如果需要,应该设置update_fields=None。 用法与Django相同:
https://docs.djangoproject.com/en/stable/ref/models/instances/#specifying-which-fields-to-save
记录更改
使用python-json-logger:
import logging from pythonjsonlogger.jsonlogger import JsonFormatter logger = logging.getLogger('obj_update') handler = logging.FileHandler('log/my_obj_changes.log') handler.setFormatter(JsonFormatter()) logger.addHandler(handler) logger.setLevel(logging.DEBUG)
使用json日志,您将得到如下消息:
{"message": "[text hello->hello2]", "model": "FooModel", "pk": 1, "changes": {"text": {"old": "hello", "new": "hello2"}}}
使用普通的记录器,您仍然可以获得输出,但它没有那么多信息:
[text hello->hello2]