Skip to main content

Django multiple select field

Project description

django-multiselectfield

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

A new model field and form field. With this you can get a multiple select from a choices. Stores to the database as a CharField of comma-separated values.

This package is inspired by this snippet.

Supported Python versions: 2.7, 3.4+

Supported Django versions: 1.11-2.1+

Installation

Install with pip

$ pip install django-multipleselectfield

Configure your 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)

In your settings.py

Only you need it, if you want the translation of django-multiselectfield

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',

    #.....................#

    'multiselectfield',
)

Customizing templates

It is possible to customize the HTML of this widget in your form template. To do so, you will need to loop through form.{field}.field.choices. Here is an example that displays the field label underneath/after the checkbox for a MultiSelectField called providers:

{% 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 Framework

Django REST Framework comes with a MultipleChoiceField that works perfectly with this:

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)
    # ...

Development

You can get the last bleeding edge version of django-multiselectfield by doing a clone of its git repository:

git clone https://github.com/idenfy/django-multiselectfield

Example project

There is a fully configured example project in the example directory. You can run it as usual:

python manage.py migrate
python manage.py loaddata app_data
python manage.py runserver

0.2.0 (2017-05-10)

  • Added support for Django 2.0+

  • Added support for Python 3.7

0.1.6 (2017-05-10)

  • Added support for Django 1.11

  • Added support for Python 3.6

  • Improved rendering in Django admin

  • Improved documentation

  • Thanks to:

0.1.5 (2017-01-02)

0.1.4 (2016-02-23)

  • Fixed warning about SubfieldBase

  • Added support for Django 1.8+

  • Added support for named groups

  • We now play nice with django-dynamic-fixture

  • More tests

0.1.3 (2014-10-13)

0.1.2 (2014-04-04)

  • Include the spanish translations to the pypi egg

  • Improvements in the readme file

  • Windows OS compatibility

  • Thanks to:

0.1.1 (2013-12-04)

  • Move the multiselectfield app to parent folder

  • Details

0.1.0 (2013-11-30)

  • Test/example project

  • Now works if the first composant of the list of tuple is an integer

  • Now max_length is not required, the Multiselect field calculate it automatically.

  • The max_choices attr can be a attr in the model field

  • Refactor the code

  • Spanish translations

  • Support to python2.6

  • Thanks to:

0.0.3 (2013-09-11)

  • Python 3 compatible

  • Fix an error, the snippet had another error when the choices were translatables

  • Improvements in the README file

0.0.2 (2012-09-28)

  • Fix an error, the snippet had an error.

0.0.1 (2012-09-27)

  • Initial version from the next snippet

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file django-multipleselectfield-0.2.0.post2.tar.gz.

File metadata

  • Download URL: django-multipleselectfield-0.2.0.post2.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.7.2 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.6.6

File hashes

Hashes for django-multipleselectfield-0.2.0.post2.tar.gz
Algorithm Hash digest
SHA256 a0b20f68c8f61fa48ff1b85f2f3c90d71f38eecd0ff187c20400e1eda47f7afc
MD5 687efea8dde2122709a95f0367c00cce
BLAKE2b-256 81b894c770fd77316bd9d35bb608baf112692bb0b51baad478a0a3c2d8ce84c8

See more details on using hashes here.

File details

Details for the file django_multipleselectfield-0.2.0.post2-py3-none-any.whl.

File metadata

  • Download URL: django_multipleselectfield-0.2.0.post2-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.7.2 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.6.6

File hashes

Hashes for django_multipleselectfield-0.2.0.post2-py3-none-any.whl
Algorithm Hash digest
SHA256 9761564547301024913db225b17a5bd4b8a70ec9c1d76e9f87308793c99de1ef
MD5 6ec23eeee7ef4fcac37d53deb40ce700
BLAKE2b-256 c6f86da42f2b5b8f2f0791fad51696f8406f84386a425a886adac8d8a633ceeb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page