def conv_List(self, model, field, kwargs): if field.field is None: raise ValueError( 'ListField "%s" must have field specified for model %s' % (field.name, model)) if isinstance(field.field, ReferenceField): loader = getattr(self.view, '_form_ajax_refs', {}).get(field.name) if loader: return AjaxSelectMultipleField(loader, **kwargs) kwargs['widget'] = form.Select2Widget(multiple=True) # TODO: Support AJAX multi-select doc_type = field.field.document_type return mongo_fields.ModelSelectMultipleField(model=doc_type, **kwargs) # Create converter view = self._get_subdocument_config(field.name) converter = self.clone_converter(view) if field.field.choices: kwargs['multiple'] = True return converter.convert(model, field.field, kwargs) unbound_field = converter.convert(model, field.field, {}) return InlineFieldList(unbound_field, min_entries=0, **kwargs)
def _model_select_field(self, prop, multiple, remote_model, **kwargs): loader = getattr(self.view, '_form_ajax_refs', {}).get(prop.key) if loader: if multiple: return AjaxSelectMultipleField(loader, **kwargs) else: return AjaxSelectField(loader, **kwargs) if 'query_factory' not in kwargs: kwargs['query_factory'] = lambda: self.session.query(remote_model) if 'widget' not in kwargs: if multiple: kwargs['widget'] = form.Select2Widget(multiple=True) else: kwargs['widget'] = form.Select2Widget() if multiple: return QuerySelectMultipleField(**kwargs) else: return QuerySelectField(**kwargs)
def conv_xlist(self, model, field, kwargs): if field.field is None: raise ValueError( 'ListField "%s" must have field specified for model %s' % (field.name, model)) if isinstance(field.field, ReferenceField): loader = getattr(self.view, '_form_ajax_refs', {}).get(field.name) if loader: return AjaxSelectMultipleField(loader, **kwargs) kwargs['widget'] = form.Select2Widget(multiple=True) doc_type = field.field.document_type return ModelSelectMultipleField(model=doc_type, **kwargs) field.field.name = '%s__field' % field.name if field.field.choices: kwargs['multiple'] = True return self.convert(model, field.field, kwargs) unbound_field = self.convert(model, field.field, {}) return ListField(unbound_field, min_entries=0, **kwargs)
def _model_select_field(self, prop, multiple, remote_model, **kwargs): loader = self.view._form_ajax_refs.get(prop.key) if loader: if multiple: return AjaxSelectMultipleField(loader, **kwargs) else: return AjaxSelectField(loader, **kwargs) if 'query_factory' not in kwargs: kwargs['query_factory'] = lambda: self.session.query(remote_model) if 'widget' not in kwargs: if prop.direction.name == 'MANYTOONE': kwargs['widget'] = form.Select2Widget() elif prop.direction.name == 'ONETOMANY': kwargs['widget'] = form.Select2Widget(multiple=True) elif prop.direction.name == 'MANYTOMANY': kwargs['widget'] = form.Select2Widget(multiple=True) if multiple: return QuerySelectMultipleField(**kwargs) else: return QuerySelectField(**kwargs)
class TestForm(Form): single_user = AjaxSelectField(loader=get_loader_by_name('user')) multiple_users = AjaxSelectMultipleField(loader=get_loader_by_name('user'))