From b1e38cccc4f4c54264563ac4371b623d614a44d0 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 4 May 2016 10:32:31 +0200 Subject: [PATCH] add real options list to ItemField JSON export (fixes #10778) It's a read-only value, ignored on import (items and data_source define it). --- tests/test_fields.py | 14 ++++++++++++++ wcs/fields.py | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/tests/test_fields.py b/tests/test_fields.py index 768e12f..d5dd0d5 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -278,3 +278,17 @@ def test_item_render_as_radio(): form = Form() field.add_to_form(form) assert str(form.render()).count('"radio"') == 1 + +def test_item_export_options(): + items_kwargs = [] + items_kwargs.append({'items': ['a', 'b', 'c']}) + items_kwargs.append({'data_source': { + 'type': 'formula', + 'value': '''['a', 'b', 'c']'''}}) + + for item_kwargs in items_kwargs: + field = fields.ItemField(id='1', label='Foobar', show_as_radio=True, **item_kwargs) + export = field.export_to_json() + assert 'options' in export + assert export['options'] == [{'value': 'a', 'label': 'a'}, {'value': 'b', 'label': 'b'}, + {'value': 'c', 'label': 'c'}] diff --git a/wcs/fields.py b/wcs/fields.py index 9180582..4413c96 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -1200,6 +1200,25 @@ class ItemField(WidgetField): values.append(display_value) return values + def export_to_json(self, include_id=False): + field = super(ItemField, self).export_to_json(include_id=include_id) + options = [] + for option in self.get_options(): + value = option[0] + try: + description = option[1] + except IndexError: + description = value + option = { + 'value': value, + 'label': description, + } + options.append(option) + if options: + field['options'] = options + return field + + register_field_class(ItemField) -- 2.1.4