Metadata-Version: 2.0
Name: dj-obj-update
Version: 0.2.1
Summary: A Django app for adding object tools for models in the admin
Home-page: https://github.com/crccheck/dj-obj-update
Author: Chris Chang
Author-email: c@crccheck.com
License: Apache License, Version 2.0
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4

Django Object Update
====================

.. image:: https://travis-ci.org/crccheck/dj-obj-update.svg?branch=master
    :target: https://travis-ci.org/crccheck/dj-obj-update

``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 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)

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/1.8/ref/models/querysets/#update-or-create

Logging changes
'''''''''''''''

Using ``python-json-logger``::

    import logging
    from pythonjsonlogger.jsonlogger import JsonFormatter

    logger = logger.getLogger('obj_update')
    handler = logging.FileHandler('log/my_obj_changes.log')
    handler.setFormatter(JsonFormatter())
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)


