Use django-auditlog 😏
This commit is contained in:
@@ -24,3 +24,4 @@ django-tables2==1.6.1
|
|||||||
pep8==1.7.0
|
pep8==1.7.0
|
||||||
dealer==2.0.5
|
dealer==2.0.5
|
||||||
django-modeltranslation==0.12.1
|
django-modeltranslation==0.12.1
|
||||||
|
django-auditlog==0.4.3
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ INSTALLED_APPS = [
|
|||||||
'django_nose',
|
'django_nose',
|
||||||
'bootstrap3',
|
'bootstrap3',
|
||||||
'django_tables2',
|
'django_tables2',
|
||||||
|
'auditlog'
|
||||||
]
|
]
|
||||||
|
|
||||||
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||||
@@ -73,6 +74,7 @@ MIDDLEWARE_CLASSES = [
|
|||||||
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
'auditlog.middleware.AuditlogMiddleware'
|
||||||
]
|
]
|
||||||
CORS_ORIGIN_ALLOW_ALL = True
|
CORS_ORIGIN_ALLOW_ALL = True
|
||||||
|
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11 on 2017-06-15 16:24
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
import django.utils.timezone
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('webapp', '0010_auto_20170608_0924'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='AuditedModel',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='AuditLogEntry',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('date', models.DateTimeField(default=django.utils.timezone.now)),
|
|
||||||
('event', models.CharField(choices=[('CREATED', 'Created'), ('MODIFIED', 'Modified'), ('DELETED', 'Deleted')], max_length=10)),
|
|
||||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='webapp.Official')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='basefeed',
|
|
||||||
name='id',
|
|
||||||
),
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='baserole',
|
|
||||||
name='id',
|
|
||||||
),
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='messageparent',
|
|
||||||
name='id',
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='basefeed',
|
|
||||||
name='auditedmodel_ptr',
|
|
||||||
field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='webapp.AuditedModel'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='baserole',
|
|
||||||
name='auditedmodel_ptr',
|
|
||||||
field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='webapp.AuditedModel'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='messageparent',
|
|
||||||
name='auditedmodel_ptr',
|
|
||||||
field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='webapp.AuditedModel'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='tag',
|
|
||||||
name='auditedmodel_ptr',
|
|
||||||
field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='webapp.AuditedModel'),
|
|
||||||
preserve_default=False,
|
|
||||||
),
|
|
||||||
]
|
|
||||||
+13
-24
@@ -5,35 +5,16 @@ from django.contrib.auth.models import User
|
|||||||
from webapp.utils import month_from_now
|
from webapp.utils import month_from_now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from auditlog.registry import auditlog
|
||||||
|
|
||||||
|
|
||||||
class AuditLogEntry(models.Model):
|
class Tag(models.Model):
|
||||||
'''
|
|
||||||
A single entry in the audit log
|
|
||||||
'''
|
|
||||||
user = models.ForeignKey('Official')
|
|
||||||
date = models.DateTimeField(default=timezone.now)
|
|
||||||
event = models.CharField(choices=[
|
|
||||||
('CREATED', _('Created')),
|
|
||||||
('MODIFIED', _('Modified')),
|
|
||||||
('DELETED', _('Deleted'))],
|
|
||||||
max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class AuditedModel(models.Model):
|
|
||||||
'''
|
|
||||||
Superclass for all audited models, e.g. events
|
|
||||||
'''
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class Tag(AuditedModel):
|
|
||||||
slug = models.SlugField(primary_key=True)
|
slug = models.SlugField(primary_key=True)
|
||||||
name = models.CharField(max_length=127)
|
name = models.CharField(max_length=127)
|
||||||
icon = models.ImageField()
|
icon = models.ImageField()
|
||||||
|
|
||||||
|
|
||||||
class BaseFeed(AuditedModel):
|
class BaseFeed(models.Model):
|
||||||
'''
|
'''
|
||||||
model containing something showing on some info feed
|
model containing something showing on some info feed
|
||||||
'''
|
'''
|
||||||
@@ -55,7 +36,7 @@ class Event(BaseFeed):
|
|||||||
end_time = models.DateTimeField(default=timezone.now)
|
end_time = models.DateTimeField(default=timezone.now)
|
||||||
|
|
||||||
|
|
||||||
class BaseRole(AuditedModel):
|
class BaseRole(models.Model):
|
||||||
'''
|
'''
|
||||||
Base model for occupations/roles
|
Base model for occupations/roles
|
||||||
'''
|
'''
|
||||||
@@ -82,7 +63,7 @@ class CustomKaehmyRole(BaseRole):
|
|||||||
form = models.ForeignKey('KaehmyForm', related_name='custom_roles')
|
form = models.ForeignKey('KaehmyForm', related_name='custom_roles')
|
||||||
|
|
||||||
|
|
||||||
class MessageParent(AuditedModel):
|
class MessageParent(models.Model):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@@ -128,3 +109,11 @@ class Official(User):
|
|||||||
verbose_name = _('Official')
|
verbose_name = _('Official')
|
||||||
|
|
||||||
phone_number = models.TextField(_('Phone number'))
|
phone_number = models.TextField(_('Phone number'))
|
||||||
|
|
||||||
|
|
||||||
|
auditlog.register(Tag)
|
||||||
|
auditlog.register(Feed)
|
||||||
|
auditlog.register(Event)
|
||||||
|
auditlog.register(PresetRole)
|
||||||
|
auditlog.register(Role)
|
||||||
|
auditlog.register(Official)
|
||||||
|
|||||||
Reference in New Issue
Block a user