Added autoupdate for changed projectiondefaults
This commit is contained in:
parent
59089ebef0
commit
1ed613629e
@ -146,6 +146,39 @@ class ProjectorViewSet(ModelViewSet):
|
|||||||
projector.elements = [{"name": "core/clock", "stable": True}]
|
projector.elements = [{"name": "core/clock", "stable": True}]
|
||||||
projector.save()
|
projector.save()
|
||||||
|
|
||||||
|
def update(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Updates the projector.
|
||||||
|
Informs about changed projectors due to changes in projection defaults:
|
||||||
|
Collects all former projectors that were assigned to new projection defaults
|
||||||
|
during the update.
|
||||||
|
"""
|
||||||
|
projector = self.get_object()
|
||||||
|
|
||||||
|
# old_pd_ids and new_pd_ids (see below) are for detecting changed projectiondefaults.
|
||||||
|
old_pd_ids = set([default.id for default in projector.projectiondefaults.all()])
|
||||||
|
|
||||||
|
# maps all projection defaults to their projectors. So we can find out later the
|
||||||
|
# old projectors to changes projection defaults.
|
||||||
|
old_pd_projector_mapping = {
|
||||||
|
pd.id: pd.projector_id for pd in ProjectionDefault.objects.all()
|
||||||
|
}
|
||||||
|
|
||||||
|
response = super().update(*args, **kwargs)
|
||||||
|
|
||||||
|
# calculate changed projection defaults
|
||||||
|
new_pd_ids = set([default.id for default in projector.projectiondefaults.all()])
|
||||||
|
changed_pd_ids = list(new_pd_ids - old_pd_ids)
|
||||||
|
inform_changed_data(ProjectionDefault.objects.filter(pk__in=changed_pd_ids))
|
||||||
|
|
||||||
|
# Find *old* projector ids for the changed defaults
|
||||||
|
affected_projector_ids = [
|
||||||
|
old_pd_projector_mapping[pd_id] for pd_id in changed_pd_ids
|
||||||
|
]
|
||||||
|
inform_changed_data(Projector.objects.filter(pk__in=affected_projector_ids))
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
def destroy(self, *args, **kwargs):
|
def destroy(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
REST API operation for DELETE requests.
|
REST API operation for DELETE requests.
|
||||||
|
Loading…
Reference in New Issue
Block a user