summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-20 13:45:27 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-20 13:45:27 +0200
commitf46de1b6d4cbf832ce6f22fe82a5377b5e0ed6a4 (patch)
treefd072535b325d65f12e415e6582cf7a073775999 /ishtar_common
parent782b857248435767cc4868a472ce27211596614a (diff)
downloadIshtar-f46de1b6d4cbf832ce6f22fe82a5377b5e0ed6a4.tar.bz2
Ishtar-f46de1b6d4cbf832ce6f22fe82a5377b5e0ed6a4.zip
Fix external id generation for finds
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 53d5c85ac..55795c91e 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -175,6 +175,35 @@ class ValueGetter(object):
return values
+class ExternalIdManager(object):
+ EXTERNAL_ID_KEY = ''
+ EXTERNAL_ID_DEPENDENCIES = []
+
+ def update_external_id(self, save=True):
+ if not self.EXTERNAL_ID_KEY:
+ raise NotImplementedError(
+ "{} should have an EXTERNAL_ID_KEY".format(self.__class__))
+ if self.external_id and not self.auto_external_id:
+ return
+ external_id = get_external_id(self.EXTERNAL_ID_KEY, self)
+ if external_id == self.external_id:
+ return
+ self.auto_external_id = True
+ self.external_id = external_id
+ if save:
+ self.skip_history_when_saving = True
+ self.save()
+ for dep in self.EXTERNAL_ID_DEPENDENCIES:
+ for obj in getattr(self, dep).all():
+ obj.update_external_id()
+ return external_id
+
+ def save(self, *args, **kwargs):
+ returned = super(ExternalIdManager, self).save(*args, **kwargs)
+ self.update_external_id()
+ return returned
+
+
class HistoricalRecords(BaseHistoricalRecords):
def create_historical_record(self, instance, type):
try: