Add historical records to every model for auditing
This commit is contained in:
parent
30294e7332
commit
bad18e069a
|
@ -1,10 +1,11 @@
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin.sites import AlreadyRegistered
|
from django.contrib.admin.sites import AlreadyRegistered
|
||||||
|
from simple_history.admin import SimpleHistoryAdmin
|
||||||
|
|
||||||
app_models = apps.get_app_config('api').get_models()
|
app_models = apps.get_app_config('api').get_models()
|
||||||
for model in app_models:
|
for model in app_models:
|
||||||
try:
|
try:
|
||||||
admin.site.register(model)
|
admin.site.register(model, SimpleHistoryAdmin)
|
||||||
except AlreadyRegistered:
|
except AlreadyRegistered:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -2,6 +2,10 @@ from datetime import date, datetime
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
from simple_history.models import HistoricalRecords
|
||||||
|
from simple_history import register
|
||||||
|
|
||||||
|
register(User)
|
||||||
|
|
||||||
IGNORE = '+'
|
IGNORE = '+'
|
||||||
|
|
||||||
|
@ -38,6 +42,8 @@ class Member(models.Model):
|
||||||
paused_date = models.DateField(blank=True, null=True)
|
paused_date = models.DateField(blank=True, null=True)
|
||||||
monthly_fees = models.IntegerField(default=55, blank=True, null=True)
|
monthly_fees = models.IntegerField(default=55, blank=True, null=True)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class Transaction(models.Model):
|
class Transaction(models.Model):
|
||||||
user = models.ForeignKey(User, related_name='transactions', blank=True, null=True, on_delete=models.SET_NULL)
|
user = models.ForeignKey(User, related_name='transactions', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
recorder = models.ForeignKey(User, related_name=IGNORE, blank=True, null=True, on_delete=models.SET_NULL)
|
recorder = models.ForeignKey(User, related_name=IGNORE, blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
|
@ -58,15 +64,21 @@ class Transaction(models.Model):
|
||||||
report_type = models.TextField(blank=True, null=True)
|
report_type = models.TextField(blank=True, null=True)
|
||||||
report_memo = models.TextField(blank=True, null=True)
|
report_memo = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class PayPalHint(models.Model):
|
class PayPalHint(models.Model):
|
||||||
account = models.CharField(unique=True, max_length=13)
|
account = models.CharField(unique=True, max_length=13)
|
||||||
member_id = models.IntegerField()
|
member_id = models.IntegerField()
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class IPN(models.Model):
|
class IPN(models.Model):
|
||||||
datetime = models.DateTimeField(auto_now_add=True)
|
datetime = models.DateTimeField(auto_now_add=True)
|
||||||
data = models.TextField()
|
data = models.TextField()
|
||||||
status = models.CharField(max_length=32)
|
status = models.CharField(max_length=32)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class Card(models.Model):
|
class Card(models.Model):
|
||||||
user = models.ForeignKey(User, related_name='cards', blank=True, null=True, on_delete=models.SET_NULL)
|
user = models.ForeignKey(User, related_name='cards', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
|
@ -76,11 +88,15 @@ class Card(models.Model):
|
||||||
last_seen_at = models.DateField(default=date.today, blank=True, null=True)
|
last_seen_at = models.DateField(default=date.today, blank=True, null=True)
|
||||||
active_status = models.CharField(max_length=32, blank=True, null=True)
|
active_status = models.CharField(max_length=32, blank=True, null=True)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class Course(models.Model):
|
class Course(models.Model):
|
||||||
name = models.TextField(blank=True, null=True)
|
name = models.TextField(blank=True, null=True)
|
||||||
description = models.TextField(blank=True, null=True)
|
description = models.TextField(blank=True, null=True)
|
||||||
is_old = models.BooleanField(default=False)
|
is_old = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class Session(models.Model):
|
class Session(models.Model):
|
||||||
instructor = models.ForeignKey(User, related_name='teaching', blank=True, null=True, on_delete=models.SET_NULL)
|
instructor = models.ForeignKey(User, related_name='teaching', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
course = models.ForeignKey(Course, related_name='sessions', blank=True, null=True, on_delete=models.SET_NULL)
|
course = models.ForeignKey(Course, related_name='sessions', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
|
@ -91,6 +107,8 @@ class Session(models.Model):
|
||||||
cost = models.DecimalField(max_digits=5, decimal_places=2)
|
cost = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
max_students = models.IntegerField(blank=True, null=True)
|
max_students = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
class Training(models.Model):
|
class Training(models.Model):
|
||||||
user = models.ForeignKey(User, related_name='training', blank=True, null=True, on_delete=models.SET_NULL)
|
user = models.ForeignKey(User, related_name='training', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
session = models.ForeignKey(Session, related_name='students', blank=True, null=True, on_delete=models.SET_NULL)
|
session = models.ForeignKey(Session, related_name='students', blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
|
@ -99,3 +117,5 @@ class Training(models.Model):
|
||||||
attendance_status = models.TextField(blank=True, null=True)
|
attendance_status = models.TextField(blank=True, null=True)
|
||||||
sign_up_date = models.DateField(default=date.today, blank=True, null=True)
|
sign_up_date = models.DateField(default=date.today, blank=True, null=True)
|
||||||
paid_date = models.DateField(blank=True, null=True)
|
paid_date = models.DateField(blank=True, null=True)
|
||||||
|
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
|
@ -66,6 +66,7 @@ INSTALLED_APPS = [
|
||||||
'allauth.account',
|
'allauth.account',
|
||||||
'allauth.socialaccount', # to support user deletion
|
'allauth.socialaccount', # to support user deletion
|
||||||
'rest_auth.registration',
|
'rest_auth.registration',
|
||||||
|
'simple_history',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
@ -76,6 +77,7 @@ MIDDLEWARE = [
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
'simple_history.middleware.HistoryRequestMiddleware',
|
||||||
]
|
]
|
||||||
|
|
||||||
ROOT_URLCONF = 'apiserver.urls'
|
ROOT_URLCONF = 'apiserver.urls'
|
||||||
|
|
|
@ -10,6 +10,7 @@ defusedxml==0.6.0
|
||||||
Django==3.0.2
|
Django==3.0.2
|
||||||
django-allauth==0.41.0
|
django-allauth==0.41.0
|
||||||
django-rest-auth==0.9.5
|
django-rest-auth==0.9.5
|
||||||
|
django-simple-history==2.8.0
|
||||||
djangorestframework==3.11.0
|
djangorestframework==3.11.0
|
||||||
docutils==0.16
|
docutils==0.16
|
||||||
fuzzywuzzy==0.17.0
|
fuzzywuzzy==0.17.0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user