Django多选字段
项目描述
django-multiselectfield
一个新的模型字段和表单字段。使用它可以从选择中获取多选框。以逗号分隔的值形式存储到数据库中的CharField中。
此egg受到以下片段的启发。
支持的Python版本:2.7, 3.4+
支持的Django版本:1.4-2.0+
安装
使用pip安装
$ pip install django-multiselectfield
配置您的models.py
from multiselectfield import MultiSelectField
# ...
MY_CHOICES = (('item_key1', 'Item title 1.1'),
('item_key2', 'Item title 1.2'),
('item_key3', 'Item title 1.3'),
('item_key4', 'Item title 1.4'),
('item_key5', 'Item title 1.5'))
MY_CHOICES2 = ((1, 'Item title 2.1'),
(2, 'Item title 2.2'),
(3, 'Item title 2.3'),
(4, 'Item title 2.4'),
(5, 'Item title 2.5'))
class MyModel(models.Model):
# .....
my_field = MultiSelectField(choices=MY_CHOICES)
my_field2 = MultiSelectField(choices=MY_CHOICES2,
max_choices=3,
max_length=3)
在您的settings.py中
如果您需要django-multiselectfield的翻译,则仅需要此操作
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
#.....................#
'multiselectfield',
)
自定义模板
可以在表单模板中自定义此小部件的HTML。要这样做,您需要遍历 form.{field}.field.choices。以下是一个示例,显示了名为 providers 的 MultiSelectField 的字段标签在复选框下方/之后显示。
{% for value, text in form.providers.field.choices %}
<div class="ui slider checkbox">
<input id="id_providers_{{ forloop.counter0 }}" name="{{ form.providers.name }}" type="checkbox" value="{{ value }}"{% if value in checked_providers %} checked="checked"{% endif %}>
<label>{{ text }}</label>
</div>
{% endfor %}
Django REST框架
Django REST框架附带了一个 MultipleChoiceField,与这个功能配合得很好。
from rest_framework import fields, serializers
from myapp.models import MY_CHOICES, MY_CHOICES2
class MyModelSerializer(serializers.HyperlinkedModelSerializer):
# ...
my_field = fields.MultipleChoiceField(choices=MY_CHOICES)
my_field2 = fields.MultipleChoiceField(choices=MY_CHOICES2)
# ...
已知问题和限制
在Django 1.4、1.5和1.8+上所有测试均通过,因此如果可能的话,请使用Django的现代版本。但是,如果您必须使用Django 1.6或1.7,有两个已知问题您需要注意。
命名组 在Django 1.6中无法正确渲染。解决方案是手动在表单中渲染字段或使用自定义小部件。如果您的解决方案足够通用,请提交包含它的拉取请求。
仅在Django 1.6和1.7中,由于 Django错误#9619,将MultiSelectField传递给 values() 或 values_list() 将返回字段的数据库表示(逗号分隔的值字符串)。解决方案是手动对结果调用 .split(',')。
Django错误是在Django 1.6中引入的,并在Django 1.8及以后版本中修复,因此对于Django <= 1.5和Django >= 1.8,values() 和 values_list() 返回一个纯Python值列表。
有关此错误的讨论,请参阅 问题#40。
开发
您可以通过克隆其git仓库来获取django-multiselectfield的最新版本。
git clone https://github.com/goinnn/django-multiselectfield
示例项目
在 example目录 中有一个完全配置好的示例项目。您可以像通常一样运行它。
python manage.py migrate # or python manage.py syncdb --noinput
python manage.py loaddata app_data
python manage.py runserver
变更日志
0.1.13 (2024-06-30)
感谢
0.1.12 (2020-02-20)
优化multiselectfield的_to_python方法
- 感谢
0.1.11 (2019-12-19)
添加对Django 3的支持
添加对Python 3.8的支持
- 感谢
0.1.9 (2019-10-02)
添加对Django 2的支持
添加对Python 3.6的支持
删除对Python (2.6, 3.3)的支持
- 感谢
0.1.6 (2017-05-10)
添加对Django 1.11的支持
添加对Python 3.6的支持
改进Django管理中的渲染
改进文档
- 感谢
0.1.5 (2017-01-02)
添加对Django 1.8-1.10的支持
添加对选择项中命名组的支持
添加对min_choices参数的支持
各种修复
更多测试
0.1.4 (2016-02-23)
修复关于SubfieldBase的警告
添加对Django 1.8+的支持
添加对命名组的支持
我们现在与django-dynamic-fixture兼容
更多测试
0.1.3 (2014-10-13)
支持Django 1.7(很抱歉延迟)
添加get_FIELD_list函数
修复在管理站点重新读取MultiSelectField时的错误
0.1.2 (2014-04-04)
将西班牙语翻译包含到pypi egg中
README文件改进
Windows操作系统兼容性
0.1.1 (2013-12-04)
将多选字段应用移动到父文件夹
详情
0.1.0 (2013-11-30)
测试/示例项目
现在如果元组列表的第一个元素是整数,则可以工作
现在max_length不是必需的,多选字段会自动计算它。
max_choices属性可以是模型字段中的一个属性
重构代码
西班牙语翻译
支持python2.6
0.0.3 (2013-09-11)
Python 3兼容
修复一个错误,当选项可翻译时,代码段有另一个错误
README文件改进
0.0.2 (2012-09-28)
修复一个错误,代码段有错误。
0.0.1 (2012-09-27)
下一个代码片段的初始版本
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源分布
构建分布
django_multiselectfield-0.1.13.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 437d72632f4c0ca416951917632529c3d1d42b62bb6c3c03e3396fa50265be94 |
|
MD5 | 4e7a0df637f6605f155bb3f8b6b500b7 |
|
BLAKE2b-256 | ddc31a326cc669fea63f22e63f6e2b2b014534a15966506e8d7fa3c232aced42 |
django_multiselectfield-0.1.13-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f146ef568c823a409f4021b98781666ec2debabfceca9176116d749dc39cb8b3 |
|
MD5 | b6c5892ac38b9e52536aee902c5166c2 |
|
BLAKE2b-256 | be9e3ed6f072f1e806516dbc8c95e4ecae7b87af6757eb5d428857ea0a097e76 |