register_change should be done correctly
This commit is contained in:
parent
93e7b92647
commit
ae2303ce22
3 changed files with 16 additions and 4 deletions
|
@ -1,4 +1,5 @@
|
||||||
import json
|
import json
|
||||||
|
from contextlib import suppress
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Annotated, Literal, Union, TypeAlias, Any, Self, Iterator
|
from typing import Annotated, Literal, Union, TypeAlias, Any, Self, Iterator
|
||||||
|
|
||||||
|
@ -165,8 +166,15 @@ class UpdateObjectOperation(BaseOperation):
|
||||||
"fields": values,
|
"fields": values,
|
||||||
})
|
})
|
||||||
instances = list(serializers.deserialize("json", json.dumps(data)))
|
instances = list(serializers.deserialize("json", json.dumps(data)))
|
||||||
for instance in instances:
|
for i in instances:
|
||||||
instance.object.save()
|
instance = i.object
|
||||||
|
if "geometry" in self.fields:
|
||||||
|
with suppress(AttributeError):
|
||||||
|
instance.register_change()
|
||||||
|
with suppress(AttributeError):
|
||||||
|
# todo: this is overkill, not always needed, we should do this differently anyways
|
||||||
|
instance.register_changed_geometries()
|
||||||
|
instance.save()
|
||||||
return instances[-1].object
|
return instances[-1].object
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,6 +197,8 @@ class UpdateManyToManyOperation(BaseOperation):
|
||||||
field_manager = getattr(instance, self.field)
|
field_manager = getattr(instance, self.field)
|
||||||
field_manager.add(*self.add_values)
|
field_manager.add(*self.add_values)
|
||||||
field_manager.remove(*self.remove_values)
|
field_manager.remove(*self.remove_values)
|
||||||
|
with suppress(AttributeError):
|
||||||
|
instance.register_change(force=True)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -199,6 +209,8 @@ class ClearManyToManyOperation(BaseOperation):
|
||||||
def apply(self, values: FieldValuesDict, instance: Model) -> Model:
|
def apply(self, values: FieldValuesDict, instance: Model) -> Model:
|
||||||
values[self.field] = []
|
values[self.field] = []
|
||||||
getattr(instance, self.field).clear()
|
getattr(instance, self.field).clear()
|
||||||
|
with suppress(AttributeError):
|
||||||
|
instance.register_change(force=True)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ class LevelGeometryMixin(GeometryMixin):
|
||||||
|
|
||||||
def register_change(self, force=False):
|
def register_change(self, force=False):
|
||||||
force = force or self.all_geometry_changed
|
force = force or self.all_geometry_changed
|
||||||
if force or self.geometry_changed:
|
if force or self.geometry_changed or self.pk is None:
|
||||||
changed_geometries.register(self.level_id, self.geometry if force else self.get_changed_geometry())
|
changed_geometries.register(self.level_id, self.geometry if force else self.get_changed_geometry())
|
||||||
|
|
||||||
def register_delete(self):
|
def register_delete(self):
|
||||||
|
|
|
@ -76,7 +76,7 @@ class SpaceGeometryMixin(GeometryMixin):
|
||||||
def register_change(self, force=False):
|
def register_change(self, force=False):
|
||||||
space = self.space
|
space = self.space
|
||||||
force = force or self.all_geometry_changed
|
force = force or self.all_geometry_changed
|
||||||
if force or self.geometry_changed:
|
if force or self.geometry_changed or self.pk is None:
|
||||||
changed_geometries.register(space.level_id, space.geometry.intersection(
|
changed_geometries.register(space.level_id, space.geometry.intersection(
|
||||||
unwrap_geom(self.geometry if force else self.get_changed_geometry())
|
unwrap_geom(self.geometry if force else self.get_changed_geometry())
|
||||||
))
|
))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue