Source code for dal_select2.widgets
"""Select2 widget implementation module."""
from dal.widgets import QuerySetSelectMixin, WidgetMixin
from django import forms
from django.utils import six
[docs]class Select2WidgetMixin(object):
"""Mixin for Select2 widgets."""
[docs] class Media:
"""Automatically include static files for the admin."""
css = {
'all': (
'autocomplete_light/vendor/select2/dist/css/select2.css',
'autocomplete_light/select2.css',
)
}
js = (
'autocomplete_light/jquery.init.js',
'autocomplete_light/autocomplete.init.js',
'autocomplete_light/vendor/select2/dist/js/select2.full.js',
'autocomplete_light/select2.js',
)
autocomplete_function = 'select2'
[docs]class ModelSelect2(QuerySetSelectMixin,
Select2WidgetMixin,
forms.Select):
"""Select widget for QuerySet choices and Select2."""
[docs]class ModelSelect2Multiple(QuerySetSelectMixin,
Select2WidgetMixin,
forms.SelectMultiple):
"""SelectMultiple widget for QuerySet choices and Select2."""
[docs]class TagSelect2(WidgetMixin,
Select2WidgetMixin,
forms.SelectMultiple):
"""Select2 in tag mode."""
[docs] def build_attrs(self, *args, **kwargs):
"""Automatically set data-tags=1."""
attrs = super(TagSelect2, self).build_attrs(*args, **kwargs)
attrs.setdefault('data-tags', 1)
return attrs
[docs] def value_from_datadict(self, data, files, name):
"""Return a comma-separated list of options.
This is needed because Select2 uses a multiple select even in tag mode,
and the model field expects a comma-separated list of tags.
"""
values = super(TagSelect2, self).value_from_datadict(data, files, name)
return six.text_type(',').join(values)