bitfield_manager Documentation Status

Automatic bitfield management for Django Models.


Install bitfield_manager:

pip install django-bitfield-manager

Add it to your INSTALLED_APPS:



First you’ll need a parent model with a status field

from django.db import models
from bitfield_manager.models import ParentBitfieldModel, ChildBitfieldModelMixin

class ParentExample(ParentBitfieldModel):
    status = models.BigIntegerField()

def __str__(self):  # __unicode__ on Python 2
    return "status: %i" % self.status

Then for all models you want django-bitfield-manager to manage add the BitfieldMeta with a list of parent models. The list of parent models takes in a tuple. The first field is the source that will be modified. The source should be a BigIntegerField or BitField (if using django-bitfield). The 2nd field is the bitflag to use (i.e. 0 will be 1 << 0, 1 will be 1 << 1, etc.)

class ChildExample1(ChildBitfieldModelMixin, models.Model):
    parent = models.ForeignKey('ParentExample', null=True)

    class BitfieldMeta:
        parent_models = [('parent', 'status', 0)]

class ChildExample2(ChildBitfieldModelMixin, models.Model):
    parent = models.ForeignKey('ParentExample', null=True)

    class BitfieldMeta:
        parent_models = [('parent.status', 1)]

Now when creating/deleting child models the parent status should update

# create the model
p = ParentExample.objects.create(status=0)
p2 = ParentExample.objects.create(status=0)
# add a child p.status is now 1
c1 = ChildExample1.objects.create(parent=p)

# add the other child. p.status is now 3
c2 = ChildExample2.objects.create(parent=p)

# deleting a child will refresh the status. p.status is now 2

# updates or mass deletes will require manual refresh
# p.status will be 2 and p2.status will be 0

# trigger a manual refresh. p.status is now correct with a status of 0

# if you know the related models modified you can specify them
# p2.status is now 2

# force status refresh will work with models multiple levels deep. Specify the search_depth to search
# more than 1 level deep


  • Allows for automatic bitfield management for Django Models.
  • Will update the status when models are added or deleted
  • Supports multi-level relationships (use dot syntax)
  • Supports django-bitfield

Running Tests

Does the code actually work?

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install tox
(myenv) $ tox


Tools used in rendering this package: