def run_from_code(self, ar, **known_values): obj = ar.selected_rows[0] related = [] for m, fk in obj._lino_ddh.fklist: # print(fk.name, m.allow_cascaded_delete, m.allow_cascaded_copy, obj) if fk.name in m.allow_cascaded_delete or fk.name in m.allow_cascaded_copy: related.append((fk, m.objects.filter(**{fk.name: obj}))) if AFTER17: fields_list = obj._meta.concrete_fields else: fields_list = obj._meta.fields if True: for f in fields_list: if not f.primary_key: if f.name not in known_values: known_values[f.name] = getattr(obj, f.name) new = obj.__class__(**known_values) # 20120704 create_instances causes fill_from_person() on a # CBSS request. else: # doesn't seem to want to work new = obj for f in fields_list: if f.primary_key: # causes Django to consider this an unsaved instance setattr(new, f.name, None) new.on_duplicate(ar, None) new.save(force_insert=True) cw = ChangeWatcher(new) for fk, qs in related: for relobj in qs: relobj.pk = None # causes Django to save a copy setattr(relobj, fk.name, new) relobj.on_duplicate(ar, new) relobj.save(force_insert=True) new.after_duplicate(ar, obj) if cw.is_dirty(): new.full_clean() new.save() return new
def run_from_code(self, ar, **known_values): obj = ar.selected_rows[0] related = [] for m, fk in obj._lino_ddh.fklist: # print(fk.name, m.allow_cascaded_delete, m.allow_cascaded_copy, obj) if fk.name in m.allow_cascaded_delete or fk.name in m.allow_cascaded_copy: related.append((fk, m.objects.filter(**{fk.name: obj}))) fields_list = obj._meta.concrete_fields if True: for f in fields_list: if not f.primary_key: if f.name not in known_values: known_values[f.name] = getattr(obj, f.name) new = obj.__class__(**known_values) # 20120704 create_instances causes fill_from_person() on a # CBSS request. else: # doesn't seem to want to work new = obj for f in fields_list: if f.primary_key: # causes Django to consider this an unsaved instance setattr(new, f.name, None) new.on_duplicate(ar, None) new.save(force_insert=True) cw = ChangeWatcher(new) for fk, qs in related: for relobj in qs: relobj.pk = None # causes Django to save a copy setattr(relobj, fk.name, new) relobj.on_duplicate(ar, new) relobj.save(force_insert=True) new.after_duplicate(ar, obj) if cw.is_dirty(): new.full_clean() new.save() return new
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 is_new: watcher = None else: watcher = ChangeWatcher(elem) ar.ah.store.form2obj(ar, data, elem, is_new) elem.full_clean() if is_new or watcher.is_dirty(): pre_ui_save.send(sender=elem.__class__, instance=elem, ar=ar) 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: on_ui_created.send(elem, request=ar.request) ar.success(_("%s has been created.") % obj2unicode(elem)) else: watcher.send_update(ar) ar.success(_("%s has been updated.") % obj2unicode(elem)) else: ar.success(_("%s : nothing to save.") % obj2unicode(elem)) elem.after_ui_save(ar, watcher)
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 is_new: watcher = None else: watcher = ChangeWatcher(elem) ar.ah.store.form2obj(ar, data, elem, is_new) elem.full_clean() if is_new or watcher.is_dirty(): pre_ui_save.send(sender=elem.__class__, instance=elem, ar=ar) 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: on_ui_created.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, watcher)
If the coach has changed, maintain the old coaching in history. """ coaching.primary = False coaching.end_date = self.today else: coaching.type = u.coaching_type if coaching.start_date is None: coaching.start_date = obj.created if obj.client_state == pcsw.ClientStates.coached: coaching.end_date = None # 1990 else: # ~ coaching.end_date = LONG_TIME_AGO coaching.end_date = coaching.start_date if watcher.is_dirty(): coaching.full_clean() coaching.save() watcher.send_update(REQUEST) if u is not None and coaching.user != u: """ create a new coaching """ coaching = pcsw.Coaching( client=obj, primary=True, user=u, type=u.coaching_type, start_date=self.today ) coaching.save() dd.on_ui_created.send(sender=coaching, request=REQUEST) elif obj.__class__ is Company: