include django_reversion for document and version history

This commit is contained in:
Fred Pauchet 2017-10-27 15:19:18 +02:00
parent 86538ce3c8
commit a57db26156
11 changed files with 155 additions and 22 deletions

View File

@ -39,7 +39,7 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'evolus',
'jci',
'simple_history',
'reversion',
'process'
]
@ -51,6 +51,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'simple_history.middleware.HistoryRequestMiddleware',
]
ROOT_URLCONF = 'config.urls'

Binary file not shown.

View File

@ -1,9 +1,11 @@
from django.contrib import admin
from .models import Audience, Document, DocumentType, Version, Site, Structure, Revision, Keyword
from reversion.admin import VersionAdmin
from .models import Audience, Document, DocumentType, Version, Site, Structure, Keyword
class DocumentAdmin(admin.ModelAdmin):
class DocumentAdmin(VersionAdmin):
list_filter = ('type', 'audiences', 'sites', 'structures')
@ -16,6 +18,5 @@ admin.site.register(Site)
admin.site.register(Structure)
admin.site.register(Document, DocumentAdmin)
admin.site.register(DocumentType, DocumentTypeAdmin)
admin.site.register(Version)
admin.site.register(Revision)
admin.site.register(Version, VersionAdmin)
admin.site.register(Keyword)

View File

@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-10-27 11:46
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('evolus', '0008_auto_20171026_1555'),
]
operations = [
migrations.CreateModel(
name='HistoricalVersion',
fields=[
('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('document', models.TextField(max_length=100)),
('major', models.PositiveIntegerField()),
('published', models.BooleanField(default=False)),
('revised_at', models.DateTimeField(blank=True, null=True)),
('created_at', models.DateTimeField(blank=True, editable=False)),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField()),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'historical version',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': 'history_date',
},
),
migrations.RemoveField(
model_name='revision',
name='version',
),
migrations.AddField(
model_name='version',
name='created_at',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AlterField(
model_name='version',
name='document',
field=models.FileField(upload_to='revisions/'),
),
migrations.AlterField(
model_name='version',
name='published',
field=models.BooleanField(default=False),
),
migrations.DeleteModel(
name='Revision',
),
]

View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-10-27 11:51
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('evolus', '0009_auto_20171027_1346'),
]
operations = [
migrations.AddField(
model_name='historicalversion',
name='revision',
field=models.PositiveIntegerField(default=1),
preserve_default=False,
),
migrations.AddField(
model_name='version',
name='revision',
field=models.PositiveIntegerField(default=1),
preserve_default=False,
),
migrations.AlterField(
model_name='version',
name='keywords',
field=models.ManyToManyField(blank=True, related_name='document_versions', to='evolus.Keyword'),
),
]

View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-10-27 13:12
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('evolus', '0010_auto_20171027_1351'),
]
operations = [
migrations.RemoveField(
model_name='historicalversion',
name='history_user',
),
migrations.AddField(
model_name='version',
name='file',
field=models.FileField(default=1, upload_to='revisions/'),
preserve_default=False,
),
migrations.AlterField(
model_name='version',
name='document',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='evolus.Document'),
),
migrations.DeleteModel(
name='HistoricalVersion',
),
]

View File

@ -6,6 +6,7 @@ from django.db import models
from closuretree.models import ClosureModel
from simple_history.models import HistoricalRecords
from django.contrib.auth.models import User
import reversion
from jci.models import Standard
@ -53,6 +54,7 @@ class DocumentType(models.Model):
ordering = ['level']
@reversion.register()
class Document(models.Model):
audiences = models.ManyToManyField(Audience)
sites = models.ManyToManyField(Site)
@ -81,6 +83,10 @@ class Document(models.Model):
except Version.DoesNotExist:
return 'None'
@reversion.create_revision()
def save(self, *args, **kwargs):
super().save()
def __str__(self):
return self.title
@ -102,15 +108,24 @@ class Keyword(ClosureModel):
return self.name
@reversion.register()
class Version(models.Model):
document = models.ForeignKey(Document, related_name='versions')
keywords = models.ManyToManyField(Keyword, related_name='document_versions')
document = models.ForeignKey(Document)
file = models.FileField(upload_to='revisions/')
keywords = models.ManyToManyField(Keyword, blank=True, related_name='document_versions')
major = models.PositiveIntegerField()
published = models.OneToOneField('Revision', related_name='published_version+', null=True, blank=True)
revision = models.PositiveIntegerField()
published = models.BooleanField(default=False)
revised_at = models.DateTimeField(null=True, blank=True)
authors = models.ManyToManyField(User, related_name='authors')
reviewers = models.ManyToManyField(User, related_name='reviewers')
validators = models.ManyToManyField(User, related_name='validators')
created_at = models.DateTimeField(auto_now_add=True)
@reversion.create_revision()
def save(self, *args, **kwargs):
self.revision = self.revision + 1
super().save(*args, **kwargs)
class Meta:
unique_together = ('document', 'major')
@ -120,20 +135,7 @@ class Version(models.Model):
return 'Published' if self.published else 'Draft'
def __str__(self):
return '{} v{} ({})'.format(self.document, self.major, self.status)
return 'v{}.{} ({})'.format(self.major, self.revision, self.status)
def publish(self):
pass
class Revision(models.Model):
revision = models.FileField(upload_to='revisions/')
created_at = models.DateTimeField(auto_now_add=True)
version = models.ForeignKey(Version, related_name='revisions')
minor = models.PositiveIntegerField()
class Meta:
ordering = ('-minor',)
def __str__(self):
return '{} rev {}'.format(self.version, self.minor)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB