Skip to main content

`dj-obj-update` helps you update an object but only saves if something changed.

Project description

Django Object Update

Build Status

dj-obj-update is a module that helps you do two things while updating an object:

  1. Only do a save if something changed
  2. Log what changed (the logger name is obj_update and only outputs logging.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


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.6.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dj_obj_update-0.6.0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

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

Hashes for dj-obj-update-0.6.0.tar.gz
Algorithm Hash digest
SHA256 253c7f104006f99d72b5fc2601c54e1791eefb7d1cfbeaee89ebf194df31ff68
MD5 2d4b05cb5812917d541dc3328ad1dd25
BLAKE2b-256 5a42bbd4add8d1c4091b3fbc3c3af25f4a7577f135d9d48df013ac3e28d40f86

See more details on using hashes here.

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

Hashes for dj_obj_update-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c9a3cbc3b4bab96b353fd807c20741d2a1e80c97704bcb14b2c6b3f6e87d1081
MD5 7e08c3c88d27edc10752cc0021a40180
BLAKE2b-256 b585af2a09e5f368b8f841aa2f414ed8c3ff26bc3775b5d26289b7d17bad05cf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page