跳转到主要内容

Django中的BitField

项目描述

https://github.com/disqus/django-bitfield/actions/workflows/ci.yml/badge.svg

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

需求

  • Django >= 1.11(强烈推荐使用具有当前安全支持的较新版本)。

  • PostgreSQL(见备注)

备注

  • SQLite不支持使用进行保存操作(请参阅用法示例)。

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

享受吧!

管理界面

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

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.2.0 - 2022-07-11:

  • 添加对Django 4.0的支持。

  • 停止支持1.11.29之前的Django版本。

  • 停止支持Python 2.7。

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-2.2.0.tar.gz (17.4 kB 查看散列

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面