跳转到主要内容

Django中的BitField

项目描述

https://api.travis-ci.org/disqus/django-bitfield.png?branch=master

为您的Django模型提供了一个类似BitField的类(使用BigIntegerField)。

(如果您是从1.2之前的版本升级,API已经发生了很大的变化,并且不向后兼容!)

要求

  • Django >= 1.10.8

  • PostgreSQL(见备注)

备注

  • SQLite不支持使用Bit(如用法示例下所示)进行保存操作。

  • MySQL在大多数与BitField相关的查询上都会失败。

安装

使用pip(或easy_install)安装它

pip install django-bitfield

用法

首先,您需要将BitField附加到您的类上。这相当于数据库中的BigIntegerField(BIGINT)

from bitfield import BitField

class MyModel(models.Model):
    flags = BitField(flags=(
        'awesome_flag',
        'flaggy_foo',
        'baz_bar',
    ))

也可以使用标签定义标志

class MyModel(models.Model):
    flags = BitField(flags=(
        ('awesome_flag', 'Awesome Flag!'),
        ('flaggy_foo', 'Flaggy Foo'),
        ('baz_bar', 'Baz (bar)'),
    ))

现在您可以使用非常熟悉的Django操作使用该字段

# 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')

享受吧!

管理

要在管理中使用小部件,您需要导入类,然后更新或创建一个ModelAdmin,并在您的admin.py中使用这些formfield_overrides行

from bitfield import BitField
from bitfield.forms import BitFieldCheckboxSelectMultiple

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
            BitField: {'widget': BitFieldCheckboxSelectMultiple},
    }

admin.site.register(MyModel, MyModelAdmin)

还有一个BitFieldListFilter列表过滤器(Django 1.4或更高版本)。要使用它,设置ModelAdmin选项list_filter

list_filter = (
        ('flags', BitFieldListFilter,)
        )

BitFieldListFilter位于bitfield.admin模块中

from bitfield.admin import BitFieldListFilter

变更日志

2.1.0 - 2021-05-25:

  • 添加了对Django 3.1、3.2的支持(无需更改)。

  • 添加了对Python 3.8、3.9的支持。

  • 修复了Django管理中使用的多个错误。

  • 删除了过时的兼容性代码。

2.0.1 - 2020-01-25:

  • 添加了对Django 3.0的支持。

2.0.0 - 2020-01-24:

  • 弃用低于1.10版本的Django支持。

  • 在CompositeBitField中使用_meta.private_fields代替已弃用的_meta.virtual_fields。

  • 在travis配置中添加使用python 3.6, 3.7和Django 2.x的测试。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-bitfield-4-0-2.1.0.tar.gz (17.7 kB 查看哈希值)

上传时间

构建分布

django_bitfield_4_0-2.1.0-py2.py3-none-any.whl (18.0 kB 查看哈希值)

上传时间 Python 2 Python 3

支持