mirror of
https://github.com/Hopiu/django-select2.git
synced 2026-05-04 03:44:42 +00:00
v3.1.3. Fixed some minor issues.
This commit is contained in:
parent
434f89cdfc
commit
7946563288
5 changed files with 52 additions and 40 deletions
6
README
6
README
|
|
@ -48,6 +48,12 @@ Special Thanks
|
|||
Changelog Summary
|
||||
=================
|
||||
|
||||
### v3.1.3
|
||||
|
||||
* Addressed enhancement issue#12.
|
||||
* Addressed enhancement issue#11.
|
||||
* Possibly addressed performance issue#8.
|
||||
|
||||
### v3.1.2
|
||||
|
||||
* Fixed issue#7.
|
||||
|
|
|
|||
|
|
@ -48,6 +48,12 @@ Special Thanks
|
|||
Changelog Summary
|
||||
=================
|
||||
|
||||
### v3.1.3
|
||||
|
||||
* Addressed enhancement issue#12.
|
||||
* Addressed enhancement issue#11.
|
||||
* Possibly addressed performance issue#8.
|
||||
|
||||
### v3.1.2
|
||||
|
||||
* Fixed issue#7.
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ from django.utils.encoding import smart_unicode
|
|||
|
||||
from .widgets import Select2Widget, Select2MultipleWidget,\
|
||||
HeavySelect2Widget, HeavySelect2MultipleWidget, AutoHeavySelect2Widget, \
|
||||
AutoHeavySelect2MultipleWidget
|
||||
AutoHeavySelect2MultipleWidget, AutoHeavySelect2Mixin
|
||||
from .views import NO_ERR_RESP
|
||||
from .util import extract_some_key_val
|
||||
|
||||
|
|
@ -118,6 +118,9 @@ class ModelResultJsonMixin(object):
|
|||
|
||||
It is expected that sub-classes will defined a class field variable
|
||||
``search_fields``, which should be a list of field names to search for.
|
||||
|
||||
..note:: As of version 3.1.3, ``search_fields`` is optional if sub-class
|
||||
overrides ``get_results``.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
|
@ -138,9 +141,6 @@ class ModelResultJsonMixin(object):
|
|||
if self.queryset is None and not 'queryset' in kwargs:
|
||||
raise ValueError('queryset is required.')
|
||||
|
||||
if not self.search_fields:
|
||||
raise ValueError('search_fields is required.')
|
||||
|
||||
self.max_results = getattr(self, 'max_results', None)
|
||||
self.to_field_name = getattr(self, 'to_field_name', 'pk')
|
||||
|
||||
|
|
@ -229,6 +229,9 @@ class ModelResultJsonMixin(object):
|
|||
|
||||
This implementation takes care of detecting if more results are available.
|
||||
"""
|
||||
if not hasattr(self, 'search_fields') or not self.search_fields:
|
||||
raise ValueError('search_fields is required.')
|
||||
|
||||
qs = copy.deepcopy(self.queryset)
|
||||
params = self.prepare_qs_params(request, term, self.search_fields)
|
||||
|
||||
|
|
@ -416,10 +419,8 @@ class HeavySelect2FieldBaseMixin(object):
|
|||
choices = kwargs.pop('choices', [])
|
||||
|
||||
kargs = {}
|
||||
if data_view is not None:
|
||||
if kwargs.get('widget', None) is None:
|
||||
kargs['widget'] = self.widget(data_view=data_view)
|
||||
elif kwargs.get('widget', None) is None:
|
||||
raise ValueError('data_view is required else you need to provide your own widget instance.')
|
||||
|
||||
kargs.update(kwargs)
|
||||
super(HeavySelect2FieldBaseMixin, self).__init__(*args, **kargs)
|
||||
|
|
@ -602,11 +603,6 @@ class AutoSelect2Field(AutoViewFieldMixin, HeavySelect2ChoiceField):
|
|||
|
||||
widget = AutoHeavySelect2Widget
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.data_view = "django_select2_central_json"
|
||||
kwargs['data_view'] = self.data_view
|
||||
super(AutoSelect2Field, self).__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class AutoSelect2MultipleField(AutoViewFieldMixin, HeavySelect2MultipleChoiceField):
|
||||
"""
|
||||
|
|
@ -620,11 +616,6 @@ class AutoSelect2MultipleField(AutoViewFieldMixin, HeavySelect2MultipleChoiceFie
|
|||
|
||||
widget = AutoHeavySelect2MultipleWidget
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.data_view = "django_select2_central_json"
|
||||
kwargs['data_view'] = self.data_view
|
||||
super(AutoSelect2MultipleField, self).__init__(*args, **kwargs)
|
||||
|
||||
|
||||
### Heavy field, specialized for Model, that uses central AutoView ###
|
||||
|
||||
|
|
@ -641,11 +632,6 @@ class AutoModelSelect2Field(ModelResultJsonMixin, AutoViewFieldMixin, HeavyModel
|
|||
|
||||
widget = AutoHeavySelect2Widget
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.data_view = "django_select2_central_json"
|
||||
kwargs['data_view'] = self.data_view
|
||||
super(AutoModelSelect2Field, self).__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class AutoModelSelect2MultipleField(ModelResultJsonMixin, AutoViewFieldMixin, HeavyModelSelect2MultipleChoiceField):
|
||||
"""
|
||||
|
|
@ -660,7 +646,3 @@ class AutoModelSelect2MultipleField(ModelResultJsonMixin, AutoViewFieldMixin, He
|
|||
|
||||
widget = AutoHeavySelect2MultipleWidget
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.data_view = "django_select2_central_json"
|
||||
kwargs['data_view'] = self.data_view
|
||||
super(AutoModelSelect2MultipleField, self).__init__(*args, **kwargs)
|
||||
|
|
|
|||
|
|
@ -511,6 +511,11 @@ class AutoHeavySelect2Mixin(object):
|
|||
id along with the Ajax request, so that the central view can identify which field should be used to
|
||||
serve the request.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs['data_view'] = "django_select2_central_json"
|
||||
super(AutoHeavySelect2Mixin, self).__init__(*args, **kwargs)
|
||||
|
||||
def render_inner_js_code(self, id_, *args):
|
||||
js = u"$('#%s').data('field_id', '%s');" % (id_, self.field_id)
|
||||
js += super(AutoHeavySelect2Mixin, self).render_inner_js_code(id_, *args)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ from django_select2 import *
|
|||
|
||||
from .models import Employee, Dept, ClassRoom, Lab, Word
|
||||
|
||||
############# Choice fields ###################
|
||||
|
||||
class EmployeeChoices(AutoModelSelect2Field):
|
||||
queryset = Employee.objects
|
||||
search_fields = ['name__icontains', ]
|
||||
|
|
@ -20,20 +22,6 @@ class WordChoices(AutoModelSelect2Field):
|
|||
queryset = Word.objects
|
||||
search_fields = ['word__icontains', ]
|
||||
|
||||
class EmployeeForm(forms.ModelForm):
|
||||
manager = EmployeeChoices(required=False)
|
||||
dept = ModelSelect2Field(queryset=Dept.objects)
|
||||
|
||||
class Meta:
|
||||
model = Employee
|
||||
|
||||
class DeptForm(forms.ModelForm):
|
||||
allotted_rooms = ClassRoomChoices()
|
||||
allotted_labs = ModelSelect2MultipleField(queryset=Lab.objects, required=False)
|
||||
|
||||
class Meta:
|
||||
model = Dept
|
||||
|
||||
class SelfChoices(AutoSelect2Field):
|
||||
def get_results(self, request, term, page, context):
|
||||
res = []
|
||||
|
|
@ -67,6 +55,22 @@ class SelfMultiChoices(AutoSelect2MultipleField):
|
|||
|
||||
return (NO_ERR_RESP, False, res)
|
||||
|
||||
########### Forms ##############
|
||||
|
||||
class EmployeeForm(forms.ModelForm):
|
||||
manager = EmployeeChoices(required=False)
|
||||
dept = ModelSelect2Field(queryset=Dept.objects)
|
||||
|
||||
class Meta:
|
||||
model = Employee
|
||||
|
||||
class DeptForm(forms.ModelForm):
|
||||
allotted_rooms = ClassRoomChoices()
|
||||
allotted_labs = ModelSelect2MultipleField(queryset=Lab.objects, required=False)
|
||||
|
||||
class Meta:
|
||||
model = Dept
|
||||
|
||||
class MixedForm(forms.Form):
|
||||
emp1 = EmployeeChoices()
|
||||
rooms1 = ClassRoomChoices()
|
||||
|
|
@ -76,6 +80,15 @@ class MixedForm(forms.Form):
|
|||
any_word = WordChoices()
|
||||
self_choices = SelfChoices(label='Self copy choices')
|
||||
self_multi_choices = SelfMultiChoices(label='Self copy multi-choices')
|
||||
issue11_test = EmployeeChoices(
|
||||
label='Issue 11 Test (Employee)',
|
||||
widget=AutoHeavySelect2Widget(
|
||||
select2_options={
|
||||
'width': '32em',
|
||||
'placeHolder': u"Search foo"
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
# These are just for testing Auto registration of fields
|
||||
EmployeeChoices() # Should already be registered
|
||||
|
|
|
|||
Loading…
Reference in a new issue