diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index ee5ad0c8d..54381598e 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -59,31 +59,31 @@ post_save.connect(post_save_user, sender=User) class HistoricalRecords(BaseHistoricalRecords): def create_historical_record(self, instance, type): - history_user = getattr(instance, '_history_user', None) + history_modifier = getattr(instance, 'history_modifier', None) manager = getattr(instance, self.manager_name) attrs = {} for field in instance._meta.fields: attrs[field.attname] = getattr(instance, field.attname) - q_history = instance.history.order_by('-history_date', - '-history_id') + q_history = instance.history.filter( + history_modifier_id=history_modifier.pk + ).order_by('-history_date', '-history_id') if not q_history.count(): - manager.create(history_type=type, history_user=history_user, - **attrs) + manager.create(history_type=type, **attrs) return - old_instance = q_history.all()[0] # multiple saving by the same user in a very short time are generaly # caused by post_save signals it is not relevant to keep them - history_date = datetime.datetime.now() - if old_instance.history_date and \ - history_date - old_instance.history_date \ - < datetime.timedelta(seconds=20): + min_history_date = datetime.datetime.now() \ + - datetime.timedelta(seconds=5) + q = q_history.filter(history_date__isnull=False, + history_date__gt=min_history_date + ).order_by('-history_date', '-history_id') + if q.count(): return # record a new version only if data have been changed for field in instance._meta.fields: if getattr(old_instance, field.attname) != attrs[field.attname]: - manager.create(history_type=type, history_user=history_user, - **attrs) + manager.create(history_type=type, **attrs) return # valid ID validator for models @@ -407,10 +407,10 @@ class BaseHistorizedItem(models.Model): """ to_del, new_item = [], None for item in self.history.all(): - to_del.append(item) if item.history_date == date: new_item = item break + to_del.append(item) if not new_item: raise HistoryError(u"The date to rollback to doesn't exist.") try: @@ -420,6 +420,11 @@ class BaseHistorizedItem(models.Model): if not hasattr(new_item, k): k = k + "_id" setattr(self, k, getattr(new_item, k)) + try: + self.history_modifier = User.objects.get( + pk=new_item.history_modifier_id) + except User.ObjectDoesNotExist: + pass self.save() except: raise HistoryError(u"The rollback has failed.") @@ -740,7 +745,8 @@ class IshtarUser(User): name=name, email=email, history_modifier=user) person.person_types.add(person_type) - return IshtarUser.objects.create(user_ptr=user, person=person) + return IshtarUser.objects.create(user_ptr=user, username=default, + person=person) def has_right(self, right_name): return self.person.has_right(right_name) |