from django.apps import apps
from django.conf import settings
try:
from django.core.urlresolvers import reverse
except ImportError:
TODO: swap this over when Django 2+ becomes more prevalent
from django.urls import reverse
from django.forms.widgets import Select, SelectMultiple, Media
from django.utils.safestring import mark_safe
from django.utils.encoding import force_text
from django.utils.html import escape
from smart_selects.utils import unicode_sorter, sort_results
class JqueryMediaMixin(object):
@property
def media(self):
"""Media defined as a dynamic property instead of an inner class."""
media = super(JqueryMediaMixin, self).media
js = []
if JQUERY_URL:
js.append(JQUERY_URL)
elif JQUERY_URL is not False:
vendor = '' if django.VERSION < (1, 9, 0) else 'vendor/jquery/'
extra = '' if settings.DEBUG else '.min'
jquery_paths = [
'{}jquery{}.js'.format(vendor, extra),
'jquery.init.js',
]
if USE_DJANGO_JQUERY:
jquery_paths = ['admin/js/{}'.format(path) for path in jquery_paths]
js.extend(jquery_paths)
media += Media(js=js)
return media
Coverage increased (+3.8%) to 89.809% when pulling 05dcc4a3de2874499ff3b9a3dfac5c623206e3e5 on master into 2ecfe8857d3ceee302d5045a6dd9c3c747b98c35 on issue_fix.
Fix render() error
import json
import django
from django.apps import apps from django.conf import settings try: from django.core.urlresolvers import reverse except ImportError:
TODO: swap this over when Django 2+ becomes more prevalent
from django.forms.widgets import Select, SelectMultiple, Media from django.utils.safestring import mark_safe from django.utils.encoding import force_text from django.utils.html import escape
from smart_selects.utils import unicode_sorter, sort_results
get_model = apps.get_model
USE_DJANGO_JQUERY = getattr(settings, 'USE_DJANGO_JQUERY', False) JQUERY_URL = getattr(settings, 'JQUERY_URL', 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js')
URL_PREFIX = getattr(settings, "SMART_SELECTS_URL_PREFIX", "")
class JqueryMediaMixin(object): @property def media(self): """Media defined as a dynamic property instead of an inner class.""" media = super(JqueryMediaMixin, self).media
class ChainedSelect(JqueryMediaMixin, Select): def init(self, to_app_name, to_model_name, chained_field, chained_model_field, foreign_key_app_name, foreign_key_model_name, foreign_key_field_name, show_all, auto_choose, sort=True, manager=None, view_name=None, *args, *kwargs): self.to_app_name = to_app_name self.to_model_name = to_model_name self.chained_field = chained_field self.chained_model_field = chained_model_field self.show_all = show_all self.auto_choose = auto_choose self.sort = sort self.manager = manager self.view_name = view_name self.foreign_key_app_name = foreign_key_app_name self.foreign_key_model_name = foreign_key_model_name self.foreign_key_field_name = foreign_key_field_name super(Select, self).init(args, **kwargs)
class ChainedSelectMultiple(JqueryMediaMixin, SelectMultiple): def init(self, to_app_name, to_model_name, chain_field, chained_model_field, foreign_key_app_name, foreign_key_model_name, foreign_key_field_name, auto_choose, horizontal, verbose_name='', manager=None, *args, *kwargs): self.to_app_name = to_app_name self.to_model_name = to_model_name self.chain_field = chain_field self.chained_model_field = chained_model_field self.auto_choose = auto_choose self.horizontal = horizontal self.verbose_name = verbose_name self.manager = manager self.foreign_key_app_name = foreign_key_app_name self.foreign_key_model_name = foreign_key_model_name self.foreign_key_field_name = foreign_key_field_name super(SelectMultiple, self).init(args, **kwargs)