diff --git a/src/c3nav/editor/migrations/0021_auto_20180918_1736.py b/src/c3nav/editor/migrations/0021_auto_20180918_1736.py new file mode 100644 index 00000000..f85ab19d --- /dev/null +++ b/src/c3nav/editor/migrations/0021_auto_20180918_1736.py @@ -0,0 +1,24 @@ +# Generated by Django 2.1.1 on 2018-09-18 15:36 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('editor', '0020_remove_permissions'), + ] + + operations = [ + migrations.AlterField( + model_name='changeset', + name='last_cleaned_with', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='checked_changesets', to='mapdata.MapUpdate'), + ), + migrations.AlterField( + model_name='changeset', + name='map_update', + field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='changeset', to='mapdata.MapUpdate', verbose_name='map update'), + ), + ] diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index bfe5425f..6746e8ee 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -38,11 +38,11 @@ class ChangeSet(models.Model): ) created = models.DateTimeField(auto_now_add=True, verbose_name=_('created')) last_change = models.ForeignKey('editor.ChangeSetUpdate', null=True, related_name='+', - verbose_name=_('last object change'), on_delete=models.PROTECT) + verbose_name=_('last object change'), on_delete=models.CASCADE) last_update = models.ForeignKey('editor.ChangeSetUpdate', null=True, related_name='+', - verbose_name=_('last update'), on_delete=models.PROTECT) + verbose_name=_('last update'), on_delete=models.CASCADE) last_state_update = models.ForeignKey('editor.ChangeSetUpdate', null=True, related_name='+', - verbose_name=_('last state update'), on_delete=models.PROTECT) + verbose_name=_('last state update'), on_delete=models.CASCADE) 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')) diff --git a/src/c3nav/editor/wrappers.py b/src/c3nav/editor/wrappers.py index 67ea7cc6..57d94d61 100644 --- a/src/c3nav/editor/wrappers.py +++ b/src/c3nav/editor/wrappers.py @@ -206,8 +206,8 @@ class ModelInstanceWrapper(BaseWrapper): descriptor = getattr(self._obj.__class__, name, None) if isinstance(descriptor, ReverseOneToOneDescriptor): try: - rel_obj = getattr(self._obj, descriptor.cache_name) - except AttributeError: + rel_obj = descriptor.related.get_cached_value(self._obj) + except KeyError: related_pk = self._obj._get_pk_val() if related_pk is None: rel_obj = None @@ -219,8 +219,8 @@ class ModelInstanceWrapper(BaseWrapper): except related_model.DoesNotExist: rel_obj = None else: - setattr(rel_obj, descriptor.related.field.get_cache_name(), self._obj) - setattr(self._obj, descriptor.cache_name, rel_obj) + descriptor.related.field.set_cached_value(rel_obj, self._obj) + descriptor.related.set_cached_value(self._obj, rel_obj) return super().__getattr__(name) def __setattr__(self, name, value): @@ -241,7 +241,7 @@ class ModelInstanceWrapper(BaseWrapper): if not isinstance(value, ModelInstanceWrapper): raise ValueError('value has to be None or ModelInstanceWrapper') setattr(self._obj, name, value._obj) - setattr(self._obj, field.get_cache_name(), value) + field.set_cached_value(self._obj, value) return super().__setattr__(name, value) @@ -368,6 +368,15 @@ class BaseQueryWrapper(BaseWrapper): return lookup_querysets[()] + def _chain(self, **kwargs): + """ + Return a copy of the current QuerySet that's ready for another + operation. + """ + obj = self._clone() + obj._obj.__dict__.update(kwargs) + return obj + def _clone(self, **kwargs): clone = self._wrap_queryset(self._obj) clone._obj.__dict__.update(kwargs) diff --git a/src/c3nav/mapdata/migrations/0070_auto_20180918_1736.py b/src/c3nav/mapdata/migrations/0070_auto_20180918_1736.py new file mode 100644 index 00000000..9cc01a51 --- /dev/null +++ b/src/c3nav/mapdata/migrations/0070_auto_20180918_1736.py @@ -0,0 +1,54 @@ +# Generated by Django 2.1.1 on 2018-09-18 15:36 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0069_mapupdate_geometries_changed'), + ] + + operations = [ + migrations.AlterField( + model_name='area', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='areas', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='door', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='doors', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='graphedge', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='graphedges', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='level', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='levels', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='locationgroup', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='locationgroups', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='poi', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pois', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='source', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sources', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + migrations.AlterField( + model_name='space', + name='access_restriction', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='spaces', to='mapdata.AccessRestriction', verbose_name='Access Restriction'), + ), + ]