include django_reversion for document and version history
This commit is contained in:
parent
86538ce3c8
commit
a57db26156
|
@ -39,7 +39,7 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'evolus',
|
'evolus',
|
||||||
'jci',
|
'jci',
|
||||||
'simple_history',
|
'reversion',
|
||||||
'process'
|
'process'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -51,6 +51,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 = 'config.urls'
|
ROOT_URLCONF = 'config.urls'
|
||||||
|
|
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
|
@ -1,9 +1,11 @@
|
||||||
from django.contrib import admin
|
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')
|
list_filter = ('type', 'audiences', 'sites', 'structures')
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,6 +18,5 @@ admin.site.register(Site)
|
||||||
admin.site.register(Structure)
|
admin.site.register(Structure)
|
||||||
admin.site.register(Document, DocumentAdmin)
|
admin.site.register(Document, DocumentAdmin)
|
||||||
admin.site.register(DocumentType, DocumentTypeAdmin)
|
admin.site.register(DocumentType, DocumentTypeAdmin)
|
||||||
admin.site.register(Version)
|
admin.site.register(Version, VersionAdmin)
|
||||||
admin.site.register(Revision)
|
|
||||||
admin.site.register(Keyword)
|
admin.site.register(Keyword)
|
||||||
|
|
|
@ -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',
|
||||||
|
),
|
||||||
|
]
|
|
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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',
|
||||||
|
),
|
||||||
|
]
|
|
@ -6,6 +6,7 @@ from django.db import models
|
||||||
from closuretree.models import ClosureModel
|
from closuretree.models import ClosureModel
|
||||||
from simple_history.models import HistoricalRecords
|
from simple_history.models import HistoricalRecords
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
import reversion
|
||||||
|
|
||||||
from jci.models import Standard
|
from jci.models import Standard
|
||||||
|
|
||||||
|
@ -53,6 +54,7 @@ class DocumentType(models.Model):
|
||||||
ordering = ['level']
|
ordering = ['level']
|
||||||
|
|
||||||
|
|
||||||
|
@reversion.register()
|
||||||
class Document(models.Model):
|
class Document(models.Model):
|
||||||
audiences = models.ManyToManyField(Audience)
|
audiences = models.ManyToManyField(Audience)
|
||||||
sites = models.ManyToManyField(Site)
|
sites = models.ManyToManyField(Site)
|
||||||
|
@ -81,6 +83,10 @@ class Document(models.Model):
|
||||||
except Version.DoesNotExist:
|
except Version.DoesNotExist:
|
||||||
return 'None'
|
return 'None'
|
||||||
|
|
||||||
|
@reversion.create_revision()
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
super().save()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
@ -102,15 +108,24 @@ class Keyword(ClosureModel):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
@reversion.register()
|
||||||
class Version(models.Model):
|
class Version(models.Model):
|
||||||
document = models.ForeignKey(Document, related_name='versions')
|
document = models.ForeignKey(Document)
|
||||||
keywords = models.ManyToManyField(Keyword, related_name='document_versions')
|
file = models.FileField(upload_to='revisions/')
|
||||||
|
keywords = models.ManyToManyField(Keyword, blank=True, related_name='document_versions')
|
||||||
major = models.PositiveIntegerField()
|
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)
|
revised_at = models.DateTimeField(null=True, blank=True)
|
||||||
authors = models.ManyToManyField(User, related_name='authors')
|
authors = models.ManyToManyField(User, related_name='authors')
|
||||||
reviewers = models.ManyToManyField(User, related_name='reviewers')
|
reviewers = models.ManyToManyField(User, related_name='reviewers')
|
||||||
validators = models.ManyToManyField(User, related_name='validators')
|
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:
|
class Meta:
|
||||||
unique_together = ('document', 'major')
|
unique_together = ('document', 'major')
|
||||||
|
@ -120,20 +135,7 @@ class Version(models.Model):
|
||||||
return 'Published' if self.published else 'Draft'
|
return 'Published' if self.published else 'Draft'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{} v{} ({})'.format(self.document, self.major, self.status)
|
return 'v{}.{} ({})'.format(self.major, self.revision, self.status)
|
||||||
|
|
||||||
def publish(self):
|
def publish(self):
|
||||||
pass
|
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 |
Loading…
Reference in New Issue