v3.1.3. Fixed some minor issues.

This commit is contained in:
AppleGrew (applegrew) 2012-11-25 01:44:36 +05:30
parent 434f89cdfc
commit 7946563288
5 changed files with 52 additions and 40 deletions

6
README
View file

@ -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.

View file

@ -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.

View file

@ -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)

View file

@ -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)

View file

@ -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