`dj-obj-update` helps you update an object but only saves if something changed.
Project description
Django Object Update
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 outputslogging.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, update_fields=[])
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?'},
)
Dealing with auto_now
fields
By default, dj-obj-update
constructs an update_fields
when it saves.
This means fields like the primary key, auto_now
, and auto_now_add
might not get saved. If you need these, you should set
update_fields=None
. Usage is the same as Django's update_fields
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]
You can selectively log object creation or updates. For example, if you don't
expect objects to be created, you can only enable the obj_update.create
logger. Likewise, you can only enable the obj_update.update
logger to ignore
creation. See the logging.config
example at the top of
test_obj_update for an example.
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
Built Distribution
Hashes for dj_obj_update-0.6.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9a3cbc3b4bab96b353fd807c20741d2a1e80c97704bcb14b2c6b3f6e87d1081 |
|
MD5 | 7e08c3c88d27edc10752cc0021a40180 |
|
BLAKE2b-256 | b585af2a09e5f368b8f841aa2f414ed8c3ff26bc3775b5d26289b7d17bad05cf |