From 0aaf6ec585c05cd1d124ed4f46e586b4023f06c8 Mon Sep 17 00:00:00 2001
From: Dominik George <nik@naturalnet.de>
Date: Mon, 10 Feb 2020 15:46:31 +0100
Subject: [PATCH] Allow getting announcements for a set of objects

---
 aleksis/core/models.py | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 872e4728f..28192ebd5 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -290,10 +290,19 @@ class Announcement(models.Model):
     recipient = GenericForeignKey("content_type", "recipient_id")
 
     @classmethod
-    def relevant_for(cls, obj: models.Model) -> models.QuerySet:
-        """ Get a QuerySet with all announcements relevant for a certain Model (e.g. a Group) """
+    def relevant_for(cls, obj: Union[models.Model, models.QuerySet]) -> models.QuerySet:
+        """ Get a QuerySet with all announcements relevant for a certain Model (e.g. a Group)
+        or a set of models in a QuerySet.
+        """
+
+        if isinstance(obj, models.QuerySet):
+            ct = ContentType.objects.get_for_model(obj.model)
+            pks = list(obj.values_list('pk', flat=True))
+        else:
+            ct = ContentType.objects.get_for_model(obj)
+            pks = [obj.pk]
 
-        return cls.objects.filter(content_type=ContentType.objects.get_for_model(obj), recipient_id=obj.id)
+        return cls.objects.filter(content_type=ct, recipient_id__in=pks)
 
     @property
     def recipient_persons(self) -> Union[models.QuerySet, Sequence[models.Model]]:
-- 
GitLab