`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_updateand 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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dj-obj-update-0.6.0.tar.gz.
File metadata
- Download URL: dj-obj-update-0.6.0.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.24.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
253c7f104006f99d72b5fc2601c54e1791eefb7d1cfbeaee89ebf194df31ff68
|
|
| MD5 |
2d4b05cb5812917d541dc3328ad1dd25
|
|
| BLAKE2b-256 |
5a42bbd4add8d1c4091b3fbc3c3af25f4a7577f135d9d48df013ac3e28d40f86
|
File details
Details for the file dj_obj_update-0.6.0-py3-none-any.whl.
File metadata
- Download URL: dj_obj_update-0.6.0-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.24.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9a3cbc3b4bab96b353fd807c20741d2a1e80c97704bcb14b2c6b3f6e87d1081
|
|
| MD5 |
7e08c3c88d27edc10752cc0021a40180
|
|
| BLAKE2b-256 |
b585af2a09e5f368b8f841aa2f414ed8c3ff26bc3775b5d26289b7d17bad05cf
|