save changeset last_update and last_change as foreign keys

This commit is contained in:
Laura Klünder 2017-07-05 15:40:28 +02:00
parent 81ab6b19d2
commit 4d416e0460
4 changed files with 86 additions and 5 deletions

View file

@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.2 on 2017-07-05 13:27
from __future__ import unicode_literals
from django.core.exceptions import ObjectDoesNotExist
from django.db import migrations, models
import django.db.models.deletion
def forwards_func(apps, schema_editor):
ChangeSet = apps.get_model('editor', 'ChangeSet')
for changeset in ChangeSet.objects.all():
try:
changeset.last_update_obj = changeset.updates.latest()
except ObjectDoesNotExist:
pass
try:
changeset.last_change_obj = changeset.updates.filter(objects_changed=True).latest()
except ObjectDoesNotExist:
pass
changeset.save()
def reverse_func(apps, schema_editor):
ChangeSet = apps.get_model('editor', 'ChangeSet')
for changeset in ChangeSet.objects.all():
try:
changeset.last_update = changeset.last_update_obj.datetime
except ObjectDoesNotExist:
changeset.last_update = changeset.created
try:
changeset.last_change = changeset.last_change_obj.datetime
except ObjectDoesNotExist:
changeset.last_change = changeset.created
changeset.save()
class Migration(migrations.Migration):
dependencies = [
('editor', '0013_remove_changesetupdate_session_user'),
]
operations = [
migrations.AlterModelOptions(
name='changesetupdate',
options={'get_latest_by': 'datetime', 'ordering': ['datetime', 'pk'], 'verbose_name': 'Change set update',
'verbose_name_plural': 'Change set updates'},
),
migrations.AddField(
model_name='changeset',
name='last_change_obj',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='editor.ChangeSetUpdate', verbose_name='last object change'),
),
migrations.AddField(
model_name='changeset',
name='last_update_obj',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='editor.ChangeSetUpdate', verbose_name='last update'),
),
migrations.RunPython(forwards_func, reverse_func),
migrations.RemoveField(
model_name='changeset',
name='last_change',
),
migrations.RemoveField(
model_name='changeset',
name='last_update',
),
migrations.RenameField(
model_name='changeset',
old_name='last_change_obj',
new_name='last_change',
),
migrations.RenameField(
model_name='changeset',
old_name='last_update_obj',
new_name='last_update',
),
]

View file

@ -29,8 +29,10 @@ class ChangeSet(models.Model):
('applied', _('accepted')),
)
created = models.DateTimeField(auto_now_add=True, verbose_name=_('created'))
last_change = models.DateTimeField(auto_now_add=True, verbose_name=_('last change'))
last_update = models.DateTimeField(auto_now_add=True, verbose_name=_('last update'))
last_change = models.ForeignKey('editor.ChangeSetUpdate', null=True, related_name='+',
verbose_name=_('last object change'))
last_update = models.ForeignKey('editor.ChangeSetUpdate', null=True, related_name='+',
verbose_name=_('last update'))
state = models.CharField(max_length=20, db_index=True, choices=STATES, default='unproposed')
author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, verbose_name=_('Author'))
title = models.CharField(max_length=100, default='', verbose_name=_('Title'))
@ -65,7 +67,7 @@ class ChangeSet(models.Model):
Returns a base QuerySet to get only changesets the current user is allowed to see
"""
if request.user.is_authenticated:
return ChangeSet.objects.filter(author=request.user)
return ChangeSet.objects.select_related('last_update', 'last_change').filter(author=request.user)
return ChangeSet.objects.none()
@classmethod
@ -82,7 +84,7 @@ class ChangeSet(models.Model):
"""
changeset_pk = request.session.get('changeset')
if changeset_pk is not None:
qs = ChangeSet.objects.exclude(state='applied')
qs = ChangeSet.objects.select_related('last_update', 'last_change').exclude(state='applied')
if request.user.is_authenticated:
qs = qs.filter(author=request.user)
else:

View file

@ -22,6 +22,7 @@ class ChangeSetUpdate(models.Model):
verbose_name = _('Change set update')
verbose_name_plural = _('Change set updates')
ordering = ['datetime', 'pk']
get_latest_by = 'datetime'
def __repr__(self):
return '<Update #%s on ChangeSet #%s>' % (str(self.pk), str(self.changeset_id))

View file

@ -23,7 +23,7 @@
{% endif %}
{% endwith %}
<br>
{% with datetime=changeset.last_update|date:"DATETIME_FORMAT" %}
{% with datetime=changeset.last_update.datetime|date:"DATETIME_FORMAT" %}
{% blocktrans %}last update at {{ datetime }}{% endblocktrans %}
{% endwith %}
</p>