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',
|
||||
'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'
|
||||
|
|
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
|
@ -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)
|
||||
|
|
|
@ -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 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 |
Loading…
Reference in New Issue