def save_new_instance(self, ar, elem): elem.before_ui_save(ar) elem.save(force_insert=True) # yes, `pre_ui_create` comes *after* save() pre_ui_create.send(elem, request=ar.request) elem.after_ui_create(ar) elem.after_ui_save(ar) ar.success(_("%s has been created.") % obj2unicode(elem)) if ar.actor.handle_uploaded_files is None: # The `rows` can contain complex strings which cause # decoding problems on the client when responding to a # file upload ar.set_response(rows=[ar.ah.store.row2list(ar, elem)]) else: # Must set text/html for file uploads, otherwise the # browser adds a <PRE></PRE> tag around the AJAX response. ar.set_content_type('text/html') if ar.actor.stay_in_grid: # ar.set_response(refresh_all=True) return # ar.set_response(refresh_all=True) # No need to ask refresh_all since closing the window will # automatically refresh the underlying window. # if ar.edit_mode == constants.EDIT_MODE_HREF: # ar.set_response(refresh_all=True) # return # if ar.edit_mode != constants.EDIT_MODE_GRID: # ar.set_response(close_window=True) ar.goto_instance(elem)
def form2obj_and_save(ar, data, elem, is_new): """Parses the data from HttpRequest to the model instance and saves it This is used by `ApiList.post` and `ApiElement.put`, and by `Restful.post` and `Restful.put`. 20140505 : no longer used by ApiList and ApiElement, but still by Restful.* """ if not is_new: watcher = ChangeWatcher(elem) ar.ah.store.form2obj(ar, data, elem, is_new) elem.full_clean() if is_new or watcher.is_dirty(): elem.before_ui_save(ar) kw2save = {} if is_new: kw2save.update(force_insert=True) else: kw2save.update(force_update=True) elem.save(**kw2save) if is_new: pre_ui_create.send(elem, request=ar.request) ar.success(_("%s has been created.") % obj2unicode(elem)) else: watcher.send_update(ar.request) ar.success(_("%s has been updated.") % obj2unicode(elem)) else: ar.success(_("%s : nothing to save.") % obj2unicode(elem)) elem.after_ui_save(ar)