Implement historical tracking using django-pghistory; add middleware for context capture and update model architecture

This commit is contained in:
pacnpal
2025-02-08 21:18:44 -05:00
parent 71b73522ae
commit a148d34cf9
6 changed files with 223 additions and 1 deletions

View File

@@ -0,0 +1,45 @@
## 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**:
```python
# 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:
```python
@pghistory.track(
pghistory.Snapshot('model.create'),
pghistory.AfterInsert('model.update'),
pghistory.BeforeDelete('model.delete')
)
```
2. **Context Middleware**:
```python
# 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