Skip to content

futurice/django-dirtyfield

Repository files navigation

django-dirtyfield

django-dirtyfield tracks changes to model instances.

Usage

Inherit from djangodirtyfield.mixin.DirtyFieldMixin

class MyModel(models.Model, DirtyFieldMixin):
    pass

Call get_changes() to list modifications.

Using a custom model.save()

Add a call to self.update_dirtyfields_copy() after any modifications done in a custom model.save().

Multiple sources

It is possible to track and namespace specified fields, eg. if you're using the model to sync with LDAP.

class ModelLdapDirtyField(DirtyFieldMixin):
    sources = {'default': {'state': '_original_state', 'lookup': '_as_dict', 'fields': '_get_fields'},
            'ldap': {'state': '_ldap_original_state', 'lookup': '_ldap_as_dict', 'fields': 'get_ldap_fields'}}
    def _ldap_as_dict(self, *args, **kwargs):
        fields = {}
        for k,v in getattr(self, 'ldap_only_fields', {}).iteritems():
            fields.update({k: getattr(self, k, '')})
        return fields

    def get_ldap_fields(self):
        return {'get_ldap_cn': 'cn',
                'username': ['uid'],
                'first_name':'givenName'}

class MyModel(ModelLdapDirtyFieldMixin):
    pass

Call get_changes() to list modifications for states default and ldap.

About

Django DirtyField -- track model instance changes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages