diff --git a/rdmo/projects/handlers.py b/rdmo/projects/handlers.py index 6f65709cb..a72cdfa17 100644 --- a/rdmo/projects/handlers.py +++ b/rdmo/projects/handlers.py @@ -2,7 +2,8 @@ from django.contrib.auth.models import User from django.contrib.sites.models import Site -from django.db.models.signals import m2m_changed +from django.db.models import Q +from django.db.models.signals import m2m_changed, post_save from django.dispatch import receiver from rdmo.projects.models import Membership, Project @@ -58,3 +59,23 @@ def m2m_changed_view_groups_signal(sender, instance, **kwargs): projects = Project.objects.filter(memberships__in=list(memberships), catalog__in=catalogs, views=instance) for project in projects: project.views.remove(instance) + + +@receiver(post_save, sender=Project) +def update_views_on_catalog_change(sender, instance, **kwargs): + # remove views that are no longer available + view_candidates = instance.views.exclude(catalogs__in=[instance.catalog]) \ + .exclude(catalogs=None) + + for view in view_candidates: + instance.views.remove(view) + + # add views that are now available + view_candidates = View.objects.exclude(id__in=[v.id for v in instance.views.all()]) \ + .filter_current_site() \ + .filter_catalog(instance.catalog) + # .filter_group(self.request.user) \ + # .filter_availability(self.request.user).exists() + + for view in view_candidates: + instance.views.add(view)