Source code for jmb.core.db.utils

"""
DB Utils
=========

Il modulo fornisce database utilities per i models

-------------

.. autofunction:: clone

"""
try:
    from django.db.transaction import set_autocommit
    set_autocommit = set_autocommit
except ImportError:
    from django.db.transaction import commit_manually
    set_autocommit = commit_manually


@set_autocommit
[docs]def clone(obj): """Crea un'istanza di un modello con i valori di un'altra instanza esistente (tranne l'id), comprese le relazioni m2m e fk. :param obj: instanza modello """ try: obj_new = obj.__class__() obj_new.__dict__.update(obj.__dict__) obj_new.pk = None obj_new.save() # foreignkey for related in obj._meta.get_all_related_objects(): setattr(obj_new, related.get_accessor_name(), getattr( obj, related.get_accessor_name()).all()) obj_new.save() # many-to-many for m2m_field in obj._meta.many_to_many: setattr(obj_new, m2m_field.attname, getattr(obj, m2m_field.attname).all()) #setattr(obj_new, m2m_field.attname, getattr(obj, m2m_field.attname).all()) obj_new.save() transaction.commit() return (obj_new, True) except Exception, e: transaction.rollback() return (e, False)