A Django app for adding object tools for models in the admin
Project description
dj-obj-update is a module that helps you do two things while updating an object:
Only do a save if something changed
Log what changed (the logger name is obj_update and only outputs DEBUG)
Installation
pip install dj-obj-update
Usage
Updating an object
from obj_update import obj_update new_data = { 'flavor': 'chocolate', } for obj in queryset: obj_update(obj, new_data)
Dry run updating an object
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, save=False)
Replacement for 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/2.0/ref/models/querysets/#update-or-create
Logging changes
Using 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)
With JSON logging, you’ll get messages like:
{"message": "[text hello->hello2]", "model": "FooModel", "pk": 1, "changes": {"text": {"old": "hello", "new": "hello2"}}}
With a normal logger, you’ll still get output, but it won’t have as much information:
[text hello->hello2]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dj-obj-update-0.4.0.tar.gz
(3.2 kB
view hashes)
Built Distribution
Close
Hashes for dj_obj_update-0.4.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afcbc933bee408d70fe904ca85f834f668a952a98b364c9c2e6cd855cfd2efa2 |
|
MD5 | 6b9debaf29dd75cf16aaaa2bb00f3a00 |
|
BLAKE2b-256 | fdd7a09494f977a455a0a8f2d8fe7c8cde49509334c5cd4dab4c0b221368c8e2 |