django-multiselectfield
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)
Added support for Django 1.8-1.10
Added support for named groups in choices
Added support for min_choices argument
Various fixes
More tests
- Thanks to:
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)
Support to Django 1.7 (I’m sorry to the delay)
Adding get_FIELD_list function
Fix an error when a MultiSelectField was reandonly at the admin site
- Thanks to:
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
Metadata
Release files for django-multipleselectfield 0.2.0.post2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-multipleselectfield-0.2.0.post2.tar.gz | 12.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_multipleselectfield-0.2.0.post2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.6 kB
Release files / django-multipleselectfield-0.2.0.post2.tar.gz
| Download URL | django-multipleselectfield-0.2.0.post2.tar.gz |
|---|---|
| Size | 12.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a0b20f68c8f61fa48ff1b85f2f3c90d71f38eecd0ff187c20400e1eda47f7afc
|
|
BLAKE2b-256 checksum How to use checksums |
81b894c770fd77316bd9d35bb608baf112692bb0b51baad478a0a3c2d8ce84c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / django_multipleselectfield-0.2.0.post2-py3-none-any.whl
| Download URL | django_multipleselectfield-0.2.0.post2-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9761564547301024913db225b17a5bd4b8a70ec9c1d76e9f87308793c99de1ef
|
|
BLAKE2b-256 checksum How to use checksums |
c6f86da42f2b5b8f2f0791fad51696f8406f84386a425a886adac8d8a633ceeb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|