Django中的BitField
项目描述
为您的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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 156f48aaeb3f50b96a6fca4cadc3abbc36d23e887e12b0cc558da1fe0808c7cd |
|
MD5 | e82376a504f0746759aff06afddf8fac |
|
BLAKE2b-256 | c57e8a0cefdf2f6b214d5ed46b594aae523795040314f409dd97c291532ad78c |
django_bitfield_4_0-2.1.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf81a6ce432cf3f4c9be356ee56b756841f3ae526d1031482102b2ccc5491e1f |
|
MD5 | c4f7e8c6d3c354ff0bd7a7eaea5b0223 |
|
BLAKE2b-256 | 1c5208450954622c011578e96a3e9aa8d250ef925fca27b54b538fb683ba9b25 |