def apply_maps_to_modelform_fields(fields, maps, default_options=None, default_template=None, default_field_class=None): """ Rearranges fields to match those defined in ``maps``. ``maps`` is a list of [field_list, options_dict] pairs. For each pair, a new map field is created that contans all the fields in ``field_list``. """ if default_field_class is None: default_field_class = MapField map_field_names = (name for name,field in fields.iteritems() if isinstance(field, (MapField, GeometryField))) if not maps: maps = [((name,),) for name in map_field_names] elif isinstance(maps, dict): maps = [[tuple(map_field_names), maps]] default_options = utils.get_options(default_options) initial_data_keymap = {} for map_definition in maps: field_list = map_definition[0] if len(map_definition) > 1: options = map_definition[1] else: options = {} if len(map_definition) > 2: template = map_definition[2] else: template = default_template map_name = "_".join(field_list) layer_fields = [] names = [] min_pos = 65535 # arbitrarily high number for field ordering initial = [] for field_name in field_list: min_pos = min(min_pos, fields.keyOrder.index(field_name)) field = fields.pop(field_name) initial.append(field_name) if not isinstance(field.widget, (Map, BaseVectorLayer)): field.widget = EditableLayer( options=utils.options_for_field(field)) layer_fields.append(field) names.append(field_name) if isinstance(field, MapField): map_field = field else: map_opts = {} map_opts.update(default_options) map_opts.update(options or {}) map_field = default_field_class(layer_fields, map_opts, layer_names=names, label=", ".join(forms.forms.pretty_name(f) for f in field_list), template=template) fields.insert(min_pos, map_name, map_field) initial_data_keymap[map_name] = initial return initial_data_keymap
def index(request): return render_to_response("testolwidget/index.html", { 'map': Map( [ EditableLayer({ 'geometry': ['point', 'linestring', 'polygon'], 'is_collection': True, }), ], { 'default_lat': 42.360836996182, 'default_lon': -71.087611985694, 'default_zoom': 10, 'layers': ['osm.mapnik', 'google.physical'], }), }, context_instance=RequestContext(request))
def __init__(self, options=None, **kwargs): kwargs['widget'] = kwargs.get('widget', EditableLayer(options)) super(EditableLayerField, self).__init__(**kwargs)