def _clone_form_items(self, old_form, new_form, clone_all_revisions): old_sections = RegistrationFormSection.find( RegistrationFormSection.registration_form_id == old_form.id) items_attrs = get_simple_column_attrs(RegistrationFormSection) for old_section in old_sections: new_section = RegistrationFormSection( **{attr: getattr(old_section, attr) for attr in items_attrs}) for old_item in old_section.children: new_item = RegistrationFormItem( parent=new_section, registration_form=new_form, **{attr: getattr(old_item, attr) for attr in items_attrs}) if new_item.is_field: if clone_all_revisions: self._clone_all_field_versions(old_item, new_item) else: field_data = RegistrationFormFieldData( field=new_item, versioned_data=old_item.versioned_data) new_item.current_data = field_data self._field_data_map[ old_item.current_data] = field_data new_section.children.append(new_item) new_form.form_items.append(new_section) db.session.flush()