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