Files
thrillwiki_django_no_react/memory-bank/decisions/pghistory-integration.md

1.3 KiB

Decision: Universal Model History via django-pghistory

Pattern Implementation

  • Tracking Method: pghistory.Snapshot() applied to all concrete models
  • Inheritance Strategy: Base model class with history tracking
  • Context Capture:
    # core/models.py
    import pghistory
    
    class HistoricalModel(models.Model):
        class Meta:
            abstract = True
    
        @pghistory.track(pghistory.Snapshot())
        def save(self, *args, **kwargs):
            return super().save(*args, **kwargs)
    

Integration Scope

  1. Model Layer:

    • All concrete models inherit from HistoricalModel
    • Automatic event labeling:
      @pghistory.track(
          pghistory.Snapshot('model.create'),
          pghistory.AfterInsert('model.update'),
          pghistory.BeforeDelete('model.delete')
      )
      
  2. Context Middleware:

    # core/middleware.py
    pghistory.context(lambda request: {
        'user': str(request.user) if request.user.is_authenticated else None,
        'ip': request.META.get('REMOTE_ADDR'),
        'user_agent': request.META.get('HTTP_USER_AGENT'),
        'session_key': request.session.session_key
    })
    
  3. Admin Integration:

    • Custom history view for Django Admin
    • Version comparison interface