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 | 03cb63b9b6c5d0d2a63088528da24f187457f4a1 (patch) | |
| tree | fd072535b325d65f12e415e6582cf7a073775999 /ishtar_common/models.py | |
| parent | 5e55409037f385cdbd01710ea11af9cb9584fd9a (diff) | |
| download | Ishtar-03cb63b9b6c5d0d2a63088528da24f187457f4a1.tar.bz2 Ishtar-03cb63b9b6c5d0d2a63088528da24f187457f4a1.zip | |
Fix external id generation for finds
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: | 
