diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 16:19:59 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 16:19:59 +0100 |
commit | 2aa223c0cac8c445e9f3855db66524cfdeae9380 (patch) | |
tree | 8b9137dd9b68121db86e4e22dfdb7b7016a6f1ad /ishtar_common/widgets.py | |
parent | 23697dd97eb201dd557272293227ec42a1c95a54 (diff) | |
parent | daeeeb175835559724c8520f4f5a8dcd5957a469 (diff) | |
download | Ishtar-2aa223c0cac8c445e9f3855db66524cfdeae9380.tar.bz2 Ishtar-2aa223c0cac8c445e9f3855db66524cfdeae9380.zip |
Merge branch 'develop'
Diffstat (limited to 'ishtar_common/widgets.py')
-rw-r--r-- | ishtar_common/widgets.py | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index 7d9e06926..5853c9675 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -224,6 +224,10 @@ class Select2Base(Select2Media): else: attrs['style'] = "width: 370px" + if value: + if type(value) not in (list, tuple): + value = value.split(',') + options = "" if self.remote: options = """{ @@ -248,8 +252,6 @@ class Select2Base(Select2Media): }""" % self.remote if value: choices = [] - if type(value) not in (list, tuple): - value = value.split(',') for v in value: try: choices.append((v, self.model.objects.get(pk=v))) @@ -300,7 +302,7 @@ class CheckboxSelectMultiple(CheckboxSelectMultipleBase): def render(self, name, value, attrs=None, choices=()): if type(value) in (str, unicode): value = value.split(',') - if type(value) not in (list, tuple): + if not isinstance(value, (list, tuple)): value = [value] return super(CheckboxSelectMultiple, self).render(name, value, attrs) @@ -356,6 +358,14 @@ class Select2BaseField(object): class Select2MultipleField(Select2BaseField, forms.MultipleChoiceField): multiple = True + def to_python(self, value): + if not isinstance(value, (list, tuple)): + if value: + value = value.split(',') + else: + value = [] + return super(Select2MultipleField, self).to_python(value) + class Select2SimpleField(Select2BaseField, forms.ChoiceField): pass @@ -470,6 +480,36 @@ class SquareMeterWidget(forms.TextInput): return mark_safe(rendered) +class GramKilogramWidget(forms.TextInput): + def render(self, name, value, attrs=None, renderer=None): + if not value: + value = u"" + final_attrs = flatatt( + self.build_attrs(attrs, {"name": name, "value": value})) + dct = {'final_attrs': final_attrs, + 'unit': u"g", + 'id': attrs['id'], + "safe_id": attrs['id'].replace('-', '_')} + t = loader.get_template('blocks/GramKilogramWidget.html') + rendered = t.render(dct) + return mark_safe(rendered) + + +class CentimeterMeterWidget(forms.TextInput): + def render(self, name, value, attrs=None, renderer=None): + if not value: + value = u"" + final_attrs = flatatt( + self.build_attrs(attrs, {"name": name, "value": value})) + dct = {'final_attrs': final_attrs, + 'unit': u"cm", + 'id': attrs['id'], + "safe_id": attrs['id'].replace('-', '_')} + t = loader.get_template('blocks/CentimeterMeterWidget.html') + rendered = t.render(dct) + return mark_safe(rendered) + + AreaWidget = forms.TextInput if settings.SURFACE_UNIT == 'square-metre': @@ -927,7 +967,7 @@ class DataTable(Select2Media, forms.RadioSelect): :param new: :param new_message: :param source_full: url to get full listing - :param multiple_select: + :param multiple_select: select multiple is available :param sortname: column name (model attribute) to use to sort :param col_prefix: prefix to remove to col_names """ @@ -1055,7 +1095,6 @@ class DataTable(Select2Media, forms.RadioSelect): if hasattr(self.associated_model, "QUICK_ACTIONS"): dct['quick_actions'] = \ self.associated_model.get_quick_actions(user=self.user) - self.multiple_select = True source = unicode(self.source) dct.update({'name': name, 'col_names': col_names, |