Skip to content
Tracking dirty fields on a Django model
Branch: develop
Clone or download
romgar Merge pull request #144 from bashu/patch-1
better syntax highlighting
Latest commit abfa404 Mar 3, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs docs update May 31, 2018
tests Fix F632: replacing is by == Mar 2, 2019
.gitignore update gitignore Mar 1, 2016
.travis.yml Fix coveralls integration Dec 13, 2018
AUTHORS add an AUTHORS file and update Jun 24, 2015
CLASSIFIERS.txt Update Python & Django support Dec 13, 2018
LICENSE Renaming requirements file Jun 17, 2015
requirements.txt Update setup and ChangeLog to prepare the 1.3.1 release Feb 28, 2018
tests-requirements.txt Fix jsonfield third-party tests Dec 13, 2018


Django Dirty Fields

Join the chat at

Tracking dirty fields on a Django model instance. Dirty means that field in-memory and database values are different.

This package is compatible and tested with the following Python & Django versions:

Django Python
1.11 2.7, 3.5, 3.6, 3.7 (added in 1.11.17)
2.0, 2.1 3.5, 3.6, 3.7

Full documentation


$ pip install django-dirtyfields


To use django-dirtyfields, you need to:

  • Inherit from DirtyFieldsMixin in the Django model you want to track.

    from django.db import models
    from dirtyfields import DirtyFieldsMixin
    class TestModel(DirtyFieldsMixin, models.Model):
        """A simple test model to test dirty fields mixin with"""
        boolean = models.BooleanField(default=True)
        characters = models.CharField(blank=True, max_length=80)
  • Use one of these 2 functions on a model instance to know if this instance is dirty, and get the dirty fields:

    • is_dirty()
    • get_dirty_fields()


>>> from tests.models import TestModel
>>> tm = TestModel.objects.create(boolean=True,characters="testing")
>>> tm.is_dirty()
>>> tm.get_dirty_fields()

>>> tm.boolean = False

>>> tm.is_dirty()
>>> tm.get_dirty_fields()
{'boolean': True}

Consult the full documentation for more informations.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.