def get_edit_form(self): edit_form_columns = tuple(c for c in self.form_columns if c != 'name') converter = self.model_form_converter(self.session, self) form_class = get_form(self.model, converter, base_class=self.form_base_class, only=edit_form_columns, exclude=self.form_excluded_columns, field_args=self.form_args, extra_fields=self.form_extra_fields) return form_class
def scaffold_form(self): """ Create form from the model. """ converter = self.model_form_converter(self.session, self) form_class = form.get_form(self.model, converter, only=self.form_columns, exclude=self.form_excluded_columns, field_args=self.form_args, extra_fields=self.form_extra_fields) if self.inline_models: form_class = self.scaffold_inline_form_models(form_class) return form_class
def scaffold_form(self): """ Create form from the model. """ converter = self.model_form_converter(self.session, self) form_class = form.get_form(self.model, converter, base_class=self.form_base_class, only=self.form_columns, exclude=self.form_excluded_columns, field_args=self.form_args, extra_fields=self.form_extra_fields) if self.inline_models: form_class = self.scaffold_inline_form_models(form_class) return form_class
def scaffold_list_form(self, custom_fieldlist=ListEditableFieldList, validators=None): """ Create form for the `index_view` using only the columns from `self.column_editable_list`. :param validators: `form_args` dict with only validators {'name': {'validators': [required()]}} :param custom_fieldlist: A WTForm FieldList class. By default, `ListEditableFieldList`. """ converter = self.model_form_converter(self.session, self) form_class = form.get_form(self.model, converter, base_class=self.form_base_class, only=self.column_editable_list, field_args=validators) return wrap_fields_in_fieldlist(self.form_base_class, form_class, custom_fieldlist)
def contribute(self, model, form_class, inline_model): mapper = model._sa_class_manager.mapper info = self.get_info(inline_model) directions = ['ONETOMANY', 'MANYTOMANY', 'MANYTOONE'] # Find property from target model to current model target_mapper = info.model._sa_class_manager.mapper reverse_prop = None for prop in target_mapper.iterate_properties: if hasattr(prop, 'direction') and prop.direction.name in directions: if issubclass(model, prop.mapper.class_): reverse_prop = prop break else: raise Exception('Cannot find reverse relation for model %s' % info.model) # Find forward property forward_prop = None for prop in mapper.iterate_properties: if hasattr(prop, 'direction') and prop.direction.name in directions: if prop.mapper.class_ == target_mapper.class_: forward_prop = prop break else: raise Exception('Cannot find forward relation for model %s' % info.model) # Remove reverse property from the list ignore = [reverse_prop.key] if info.form_excluded_columns: exclude = ignore + list(info.form_excluded_columns) else: exclude = ignore # Create converter converter = self.model_converter(self.session, info) # Create form child_form = info.get_form() if child_form is None: child_form = get_form(info.model, converter, only=info.form_columns, exclude=exclude, field_args=info.form_args, hidden_pk=True) # Post-process form child_form = info.postprocess_form(child_form) kwargs = dict() label = self.get_label(info, forward_prop.key) if label: kwargs['label'] = label # Contribute field setattr(form_class, forward_prop.key, self.inline_field_list_type(child_form, self.session, info.model, reverse_prop.key, info, **kwargs)) return form_class