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)