diff options
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 |
commit | f46de1b6d4cbf832ce6f22fe82a5377b5e0ed6a4 (patch) | |
tree | fd072535b325d65f12e415e6582cf7a073775999 /ishtar_common | |
parent | 782b857248435767cc4868a472ce27211596614a (diff) | |
download | Ishtar-f46de1b6d4cbf832ce6f22fe82a5377b5e0ed6a4.tar.bz2 Ishtar-f46de1b6d4cbf832ce6f22fe82a5377b5e0ed6a4.zip |
Fix external id generation for finds
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 29 |
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: |