Repository URL to install this package:
|
Version:
2.0.1 ▾
|
django-bitfield
/
METADATA
|
|---|
Metadata-Version: 2.1
Name: django-bitfield
Version: 2.0.1
Summary: BitField in Django
Home-page: https://github.com/disqus/django-bitfield
Author: Disqus
Author-email: opensource@disqus.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Description-Content-Type: text/x-rst
Requires-Dist: Django (>=1.10.8)
Requires-Dist: six
Provides-Extra: tests
Requires-Dist: flake8 ; extra == 'tests'
Requires-Dist: mysqlclient ; extra == 'tests'
Requires-Dist: psycopg2 (>=2.3) ; extra == 'tests'
Requires-Dist: pytest-django ; extra == 'tests'
django-bitfield
---------------
.. image:: https://api.travis-ci.org/disqus/django-bitfield.png?branch=master
:target: https://travis-ci.org/disqus/django-bitfield
Provides a BitField like class (using a BigIntegerField) for your Django models.
(If you're upgrading from a version before 1.2 the API has changed greatly and is backwards incompatible!)
Requirements
============
* Django >= 1.10.8
* PostgreSQL (see notes)
**Notes:**
- SQLite does not support save operations using a ``Bit`` (per the example under Usage).
- MySQL fails on most queries related to BitField's.
Installation
============
Install it with pip (or easy_install)::
pip install django-bitfield
Usage
=====
First you'll need to attach a BitField to your class. This acts as a BigIntegerField (BIGINT) in your database::
from bitfield import BitField
class MyModel(models.Model):
flags = BitField(flags=(
'awesome_flag',
'flaggy_foo',
'baz_bar',
))
Flags can also be defined with labels::
class MyModel(models.Model):
flags = BitField(flags=(
('awesome_flag', 'Awesome Flag!'),
('flaggy_foo', 'Flaggy Foo'),
('baz_bar', 'Baz (bar)'),
))
Now you can use the field using very familiar Django operations::
# Create the model
o = MyModel.objects.create(flags=0)
# Add awesome_flag (does not work in SQLite)
MyModel.objects.filter(pk=o.pk).update(flags=F('flags').bitor(MyModel.flags.awesome_flag))
# Set flags manually to [awesome_flag, flaggy_foo]
MyModel.objects.filter(pk=o.pk).update(flags=MyModel.flags.awesome_flag | MyModel.flags.flaggy_foo)
# Remove awesome_flag (does not work in SQLite)
MyModel.objects.filter(pk=o.pk).update(flags=F('flags').bitand(~MyModel.flags.awesome_flag))
# Find by awesome_flag
MyModel.objects.filter(flags=MyModel.flags.awesome_flag)
# Exclude by awesome_flag
MyModel.objects.filter(flags=~MyModel.flags.awesome_flag)
# Test awesome_flag
if o.flags.awesome_flag:
print "Happy times!"
# List all flags on the field
for f in o.flags:
print f
# Get a flag label
print o.flags.get_label('awesome_flag')
Enjoy!
Admin
=====
To use the widget in the admin, you'll need to update your ModelAdmin. Add the
following lines to your ModelAdmin::
formfield_overrides = {
BitField: {'widget': BitFieldCheckboxSelectMultiple},
}
Make sure you've imported the classes by adding these lines to the top of the file::
from bitfield import BitField
from bitfield.forms import BitFieldCheckboxSelectMultiple
There is also a ``BitFieldListFilter`` list filter (Django 1.4 or newer).
To use it set ``list_filter`` ModelAdmin option::
list_filter = (
('flags', BitFieldListFilter,)
)
BitFieldListFilter is in ``bitfield.admin`` module::
from bitfield.admin import BitFieldListFilter
Changelog
=========
2.0.1 - 2020-01-25:
- Add support for Django 3.0.
2.0.0 - 2020-01-24:
- Drop support for Django versions below 1.10.
- Use _meta.private_fields instead of deprecated _meta.virtual_fields in CompositeBitField.
- Add testing with python 3.6, 3.7 and Django 2.x to travis configuration.