Django的Bitfield

jnt-django-bitfield的Python项目详细描述


为django模型提供类似位字段的类(使用bigingerfield)。

(如果要从1.2之前的版本升级,则API已发生重大更改,并且向后不兼容!)

要求

  • django>;=2.0
  • PostgreSQL(见注释)

注释:

  • sqlite不支持使用Bit(根据使用中的示例)进行保存操作。
  • mysql在大多数与bitfield相关的查询中失败。

安装

用PIP安装(或简易安装):

pip install jnt-django-bitfield

用法

首先,你需要在你的类中附加一个位字段。这相当于数据库中的bigingerfield(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。添加 以下行指向您的modeladmin:

formfield_overrides = {
        BitField: {'widget': BitFieldCheckboxSelectMultiple},
}

通过将这些行添加到文件顶部,确保已导入类:

from bitfield import BitField
from bitfield.forms import BitFieldCheckboxSelectMultiple

还有一个BitFieldListFilterlist过滤器(django 1.4或更新版本)。 要使用它,请设置list_filtermodeladmin选项:

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

BitFieldListFilter位于^{TT4}$模块中:

from bitfield.admin import BitFieldListFilter

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何提高我的软件项目的速度?   java将Jetty嵌入JavaSE项目   数组中的java重复字符   java我的Shell排序没有按预期工作,我需要一些帮助来找出我做错了什么   java如何在JBoss EAP6/AS7中应用先过滤后安全约束   java使用一个随机运算符来处理多个变量   java为什么我不能在文件中写我的二叉树?   java应用程序不会在Eclipse emulator上运行   我第一次尝试制作一个简单的基于瓷砖的java游戏   java为TermVectors安装Solr修补程序   java无法将更新的对象值从客户端发送到服务器,服务器读取不存在的值   Azure,java sdk,使用ARM模板部署无法转换参数文件   是否有一个Java等价于空合并运算符(?)在C#?   java如果只初始化了超类对象,是否可以调用特定于子类的方法?   向类文件传递值时出现java NullPointerException   java模不起作用   java Android TranslateAnimation动态更新布局的大小   数据结构如何在java中实例化队列对象?   java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?