Skip to content

Commit 3cfe701

Browse files
committed
Add Select2 mixin that uses Django's own select template
1 parent b858953 commit 3cfe701

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

django_select2/forms.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555
import django
5656
from django import forms
57-
from django.contrib.admin.widgets import SELECT2_TRANSLATIONS
57+
from django.contrib.admin.widgets import SELECT2_TRANSLATIONS, AutocompleteMixin
5858
from django.core import signing
5959
from django.db.models import Q
6060
from django.forms.models import ModelChoiceIterator
@@ -79,6 +79,9 @@ class Select2Mixin:
7979
form media.
8080
"""
8181

82+
css_class_name = "django-select2"
83+
theme = None
84+
8285
empty_label = ""
8386

8487
def __init__(self, *args, **kwargs):
@@ -90,7 +93,7 @@ def build_attrs(self, base_attrs, extra_attrs=None):
9093
default_attrs = {
9194
"lang": self.i18n_name,
9295
"data-minimum-input-length": 0,
93-
"data-theme": settings.SELECT2_THEME,
96+
"data-theme": self.theme or settings.SELECT2_THEME,
9497
}
9598
if self.is_required:
9699
default_attrs["data-allow-clear"] = "false"
@@ -102,9 +105,9 @@ def build_attrs(self, base_attrs, extra_attrs=None):
102105
attrs = super().build_attrs(default_attrs, extra_attrs=extra_attrs)
103106

104107
if "class" in attrs:
105-
attrs["class"] += " django-select2"
108+
attrs["class"] += " " + self.css_class_name
106109
else:
107-
attrs["class"] = "django-select2"
110+
attrs["class"] = self.css_class_name
108111
return attrs
109112

110113
def optgroups(self, name, value, attrs=None):
@@ -137,6 +140,20 @@ def media(self):
137140
)
138141

139142

143+
class Select2AdminMixin:
144+
"""Select2 mixin that uses Django's own select template."""
145+
146+
css_class_name = "admin-autocomplete"
147+
theme = "admin-autocomplete"
148+
149+
@property
150+
def media(self):
151+
return forms.Media(
152+
js=Select2Mixin.media.js,
153+
css=AutocompleteMixin.media.css,
154+
)
155+
156+
140157
class Select2TagMixin:
141158
"""Mixin to add select2 tag functionality."""
142159

0 commit comments

Comments
 (0)