跳转到主要内容

Django多选字段

项目描述

django-multiselectfield

https://travis-ci.org/goinnn/django-multiselectfield.png?branch=master https://coveralls.io/repos/goinnn/django-multiselectfield/badge.png?branch=master https://badge.fury.io/py/django-multiselectfield.png

一个新的模型字段和表单字段。使用它可以从选择中获取多选框。以逗号分隔的值形式存储到数据库中的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。以下是一个示例,显示了名为 providersMultiSelectField 的字段标签在复选框下方/之后显示。

{% 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,有两个已知问题您需要注意。

  1. 命名组 在Django 1.6中无法正确渲染。解决方案是手动在表单中渲染字段或使用自定义小部件。如果您的解决方案足够通用,请提交包含它的拉取请求。

  2. 仅在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)

  • 从表单字段返回MSFList而不是普通列表(#118#135

  • 修复CI(#122#147#148#151

  • 在将表单字段转换为默认值时添加 min_choices#123

  • 支持Django 5.0并删除旧兼容性(#148

感谢

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)

0.1.4 (2016-02-23)

  • 修复关于SubfieldBase的警告

  • 添加对Django 1.8+的支持

  • 添加对命名组的支持

  • 我们现在与django-dynamic-fixture兼容

  • 更多测试

0.1.3 (2014-10-13)

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 (11.7 kB 查看哈希值)

上传时间

构建分布

django_multiselectfield-0.1.13-py3-none-any.whl (14.8 kB 查看哈希值)

上传时间 Python 3

支持者: