diff options
Diffstat (limited to 'ishtar_common/widgets.py')
-rw-r--r-- | ishtar_common/widgets.py | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index d1f6e49d3..8788920af 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -181,14 +181,14 @@ class Select2DynamicField(forms.ChoiceField): return super(Select2DynamicField, self).to_python(value).strip() -class Select2Multiple(Select2Media, forms.SelectMultiple): +class Select2Base(Select2Media): def __init__(self, attrs=None, choices=(), remote=None, model=None, new=None, available=None): - super(Select2Multiple, self).__init__(attrs, choices) self.remote = remote self.available = available self.model = model self.new = new + super(Select2Base, self).__init__(attrs, choices) def get_q(self): q = self.model.objects @@ -273,7 +273,7 @@ class Select2Multiple(Select2Media, forms.SelectMultiple): u'<a href="#" class="add-button input-group-text" ' \ u'onclick="open_window(\'%s\');">+</a></span></div>' % url_new - html += super(Select2Multiple, self).render(name, value, attrs) + html += super(Select2Base, self).render(name, value, attrs) html += new html += """<script type="text/javascript"> $(document).ready(function() {{ @@ -283,6 +283,14 @@ class Select2Multiple(Select2Media, forms.SelectMultiple): return mark_safe(html) +class Select2Simple(Select2Base, forms.Select): + pass + + +class Select2Multiple(Select2Base, forms.SelectMultiple): + pass + + class CheckboxSelectMultiple(CheckboxSelectMultipleBase): """ Fix initialization bug. @@ -297,7 +305,9 @@ class CheckboxSelectMultiple(CheckboxSelectMultipleBase): return super(CheckboxSelectMultiple, self).render(name, value, attrs) -class Select2MultipleField(forms.MultipleChoiceField): +class Select2BaseField(object): + multiple = False + def __init__(self, *args, **kwargs): new = None if 'new' in kwargs: @@ -321,11 +331,15 @@ class Select2MultipleField(forms.MultipleChoiceField): if long_widget: attrs['cols'] = True attrs['full-width'] = True - kwargs['widget'] = Select2Multiple( + if self.multiple: + widget = Select2Multiple + else: + widget = Select2Simple + kwargs['widget'] = widget( model=self.model, available=self.available, remote=self.remote, new=new, attrs=attrs ) - super(Select2MultipleField, self).__init__(*args, **kwargs) + super(Select2BaseField, self).__init__(*args, **kwargs) def get_q(self): q = self.model.objects @@ -335,10 +349,18 @@ class Select2MultipleField(forms.MultipleChoiceField): def valid_value(self, value): if not self.model: - return super(Select2MultipleField, self).valid_value(value) + return super(Select2BaseField, self).valid_value(value) return bool(self.get_q().filter(pk=value).count()) +class Select2MultipleField(Select2BaseField, forms.MultipleChoiceField): + multiple = True + + +class Select2SimpleField(Select2BaseField, forms.ChoiceField): + pass + + class DeleteWidget(forms.CheckboxInput): def render(self, name, value, attrs=None, renderer=None): final_attrs = flatatt( @@ -867,7 +889,7 @@ class JQueryPersonOrganization(forms.TextInput): return html -class DataTable(forms.RadioSelect): +class DataTable(Select2Media, forms.RadioSelect): def __init__(self, source, form, associated_model, attrs={}, table_cols='TABLE_COLS', multiple=False, multiple_cols=[2], new=False, new_message="", source_full=None, |