save changeset last_update and last_change as foreign keys
This commit is contained in:
parent
81ab6b19d2
commit
4d416e0460
4 changed files with 86 additions and 5 deletions
78
src/c3nav/editor/migrations/0014_last_update_foreign_key.py
Normal file
78
src/c3nav/editor/migrations/0014_last_update_foreign_key.py
Normal 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',
|
||||
),
|
||||
]
|
|
@ -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:
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue