diff options
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r-- | ishtar/furnitures/models.py | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 2fe65b598..de519076f 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -174,15 +174,32 @@ class BaseHistorizedItem(models.Model): super(BaseHistorizedItem, self).save(*args, **kwargs) return True - def get_previous(self, step, strict=True): + def get_previous(self, step=None, date=None, strict=True): """ Get a "step" previous state of the item """ + assert step or date historized = self.history.all() - assert len(historized) > step - assert not hasattr(historized, '_step') - item = historized[step] + item = None + if step: + assert len(historized) > step + item = historized[step] + else: + for step, item in enumerate(historized): + if item.history_date == date: + break + # ended with no match + if item.history_date != date: + return item._step = step + if len(historized) != (step + 1): + item._previous = historized[step + 1].history_date + else: + item._previous = None + if step > 0: + item._next = historized[step - 1].history_date + else: + item._next = None model = self.__class__ for k in model._meta.get_all_field_names(): field = model._meta.get_field_by_name(k)[0] |