def save_existing_instance(self, elem, ar): watcher = ChangeWatcher(elem) ar.ah.store.form2obj(ar, ar.rqdata, elem, False) elem.full_clean() if watcher.is_dirty(): elem.before_ui_save(ar) elem.save(force_update=True) 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) # TODO: in fact we need *either* `rows` (when this was called # from a Grid) *or* `goto_instance` (when this was called from a # form). But how to find out which one is needed? # if ar.edit_mode == constants.EDIT_MODE_GRID: ar.set_response(rows=[ar.ah.store.row2list(ar, 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)