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
|
||||
from contextlib import suppress
|
||||
from dataclasses import dataclass
|
||||
from typing import Annotated, Literal, Union, TypeAlias, Any, Self, Iterator
|
||||
|
||||
|
@ -165,8 +166,15 @@ class UpdateObjectOperation(BaseOperation):
|
|||
"fields": values,
|
||||
})
|
||||
instances = list(serializers.deserialize("json", json.dumps(data)))
|
||||
for instance in instances:
|
||||
instance.object.save()
|
||||
for i in instances:
|
||||
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
|
||||
|
||||
|
||||
|
@ -189,6 +197,8 @@ class UpdateManyToManyOperation(BaseOperation):
|
|||
field_manager = getattr(instance, self.field)
|
||||
field_manager.add(*self.add_values)
|
||||
field_manager.remove(*self.remove_values)
|
||||
with suppress(AttributeError):
|
||||
instance.register_change(force=True)
|
||||
return instance
|
||||
|
||||
|
||||
|
@ -199,6 +209,8 @@ class ClearManyToManyOperation(BaseOperation):
|
|||
def apply(self, values: FieldValuesDict, instance: Model) -> Model:
|
||||
values[self.field] = []
|
||||
getattr(instance, self.field).clear()
|
||||
with suppress(AttributeError):
|
||||
instance.register_change(force=True)
|
||||
return instance
|
||||
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ class LevelGeometryMixin(GeometryMixin):
|
|||
|
||||
def register_change(self, force=False):
|
||||
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())
|
||||
|
||||
def register_delete(self):
|
||||
|
|
|
@ -76,7 +76,7 @@ class SpaceGeometryMixin(GeometryMixin):
|
|||
def register_change(self, force=False):
|
||||
space = self.space
|
||||
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(
|
||||
unwrap_geom(self.geometry if force else self.get_changed_geometry())
|
||||
))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue