diff options
Diffstat (limited to 'ishtar_common/models.py')
-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: |