summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 19be62948..1c841a984 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -1993,6 +1993,31 @@ class BaseHistorizedItem(StatisticItem, TemplateItem, FullSearch, Imported,
def merge(self, item, keep_old=False):
merge_model_objects(self, item, keep_old=keep_old)
+ def duplicate(self, user=None, data=None):
+ model = self.__class__
+ new = model.objects.get(pk=self.pk)
+
+ for field in model._meta.fields:
+ # pk is in PRIVATE_FIELDS so: new.pk = None and a new
+ # item will be created on save
+ if field.name in PRIVATE_FIELDS:
+ setattr(new, field.name, None)
+ if user:
+ new.history_user = user
+ if data:
+ for k in data:
+ setattr(new, k, data[k])
+ new.save()
+
+ # m2m fields
+ m2m = [field.name for field in model._meta.many_to_many
+ if field.name not in PRIVATE_FIELDS]
+ for field in m2m:
+ for val in getattr(self, field).all():
+ if val not in getattr(new, field).all():
+ getattr(new, field).add(val)
+ return new
+
def update_external_id(self, save=False):
if not self.EXTERNAL_ID_KEY or (
self.external_id and