last_cleaned_with. execute _clean_changes only if there was a map update
This commit is contained in:
parent
cc3d72bc7b
commit
b85d245360
2 changed files with 34 additions and 3 deletions
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.2 on 2017-07-08 15:52
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mapdata', '0018_auto_20170708_1752'),
|
||||||
|
('editor', '0017_changeset_map_update'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='changeset',
|
||||||
|
name='last_cleaned_with',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='checked_changesets', to='mapdata.MapUpdate'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -49,6 +49,7 @@ class ChangeSet(models.Model):
|
||||||
assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT,
|
assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT,
|
||||||
related_name='assigned_changesets', verbose_name=_('assigned to'))
|
related_name='assigned_changesets', verbose_name=_('assigned to'))
|
||||||
map_update = models.OneToOneField(MapUpdate, null=True, related_name='changeset', verbose_name=_('map update'))
|
map_update = models.OneToOneField(MapUpdate, null=True, related_name='changeset', verbose_name=_('map update'))
|
||||||
|
last_cleaned_with = models.ForeignKey(MapUpdate, null=True, related_name='checked_changesets')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('Change Set')
|
verbose_name = _('Change Set')
|
||||||
|
@ -182,8 +183,13 @@ class ChangeSet(models.Model):
|
||||||
return chain(*(changed_objects.values() for changed_objects in self.changed_objects.values()))
|
return chain(*(changed_objects.values() for changed_objects in self.changed_objects.values()))
|
||||||
|
|
||||||
def _clean_changes(self):
|
def _clean_changes(self):
|
||||||
changed_objects = self.changed_objects_set.all()
|
with self.lock_to_edit() as changeset:
|
||||||
with self.lock_to_edit():
|
last_map_update_pk = MapUpdate.last_update()[0]
|
||||||
|
if changeset.last_cleaned_with_id == last_map_update_pk:
|
||||||
|
return
|
||||||
|
|
||||||
|
changed_objects = changeset.changed_objects_set.all()
|
||||||
|
|
||||||
# delete changed objects that refer in some way to deleted objects and clean up m2m changes
|
# delete changed objects that refer in some way to deleted objects and clean up m2m changes
|
||||||
object_pks = {}
|
object_pks = {}
|
||||||
for changed_object in changed_objects:
|
for changed_object in changed_objects:
|
||||||
|
@ -209,7 +215,7 @@ class ChangeSet(models.Model):
|
||||||
changed_objects = [obj for obj in changed_objects if obj.pk is not None]
|
changed_objects = [obj for obj in changed_objects if obj.pk is not None]
|
||||||
|
|
||||||
# clean updated fields
|
# clean updated fields
|
||||||
objects = self.get_objects(many=False, changed_objects=changed_objects, prefetch_related=('groups', ))
|
objects = changeset.get_objects(many=False, changed_objects=changed_objects, prefetch_related=('groups', ))
|
||||||
for changed_object in changed_objects:
|
for changed_object in changed_objects:
|
||||||
if changed_object.clean_updated_fields(objects):
|
if changed_object.clean_updated_fields(objects):
|
||||||
to_save.add(changed_object)
|
to_save.add(changed_object)
|
||||||
|
@ -259,6 +265,9 @@ class ChangeSet(models.Model):
|
||||||
for changed_object in to_save:
|
for changed_object in to_save:
|
||||||
changed_object.save(standalone=True)
|
changed_object.save(standalone=True)
|
||||||
|
|
||||||
|
changeset.last_cleaned_with_id = last_map_update_pk
|
||||||
|
changeset.save()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Analyse Changes
|
Analyse Changes
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue