From fcfebcd9521fb343a7807106493010c9db089366 Mon Sep 17 00:00:00 2001 From: dormantman Date: Thu, 9 Jan 2020 19:46:12 +0300 Subject: [PATCH 1/2] Added unsubscribe action --- apps/notification/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/notification/models.py b/apps/notification/models.py index 2f0ba500..28f8636a 100644 --- a/apps/notification/models.py +++ b/apps/notification/models.py @@ -115,6 +115,7 @@ class Subscriber(ProjectBaseMixin): def unsubscribe(self, query: dict): """Unsubscribe user.""" self.subscribe_set.update(unsubscribe_date=now()) + self.subscription_types = [] @property def send_to(self): From 2800f2f158e24b778a254d0eb2a95791818f5398 Mon Sep 17 00:00:00 2001 From: dormantman Date: Fri, 10 Jan 2020 16:11:10 +0300 Subject: [PATCH 2/2] Fix unsubscribe bug --- apps/notification/models.py | 1 - apps/notification/serializers/common.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/notification/models.py b/apps/notification/models.py index 28f8636a..2f0ba500 100644 --- a/apps/notification/models.py +++ b/apps/notification/models.py @@ -115,7 +115,6 @@ class Subscriber(ProjectBaseMixin): def unsubscribe(self, query: dict): """Unsubscribe user.""" self.subscribe_set.update(unsubscribe_date=now()) - self.subscription_types = [] @property def send_to(self): diff --git a/apps/notification/serializers/common.py b/apps/notification/serializers/common.py index 4a9e64f5..e68d4a14 100644 --- a/apps/notification/serializers/common.py +++ b/apps/notification/serializers/common.py @@ -1,4 +1,5 @@ """Notification app serializers.""" + from django.utils.translation import ugettext_lazy as _ from rest_framework import serializers @@ -83,7 +84,7 @@ class SubscribeObjectSerializer(serializers.ModelSerializer): """Meta class.""" model = models.Subscriber - fields = ('subscriber', ) + fields = ('subscriber',) read_only_fields = ('subscribe_date', 'unsubscribe_date',) @@ -91,7 +92,7 @@ class SubscribeSerializer(serializers.ModelSerializer): """Subscribe serializer.""" email = serializers.EmailField(required=False, source='send_to') - subscription_types = SubscriptionTypeSerializer(many=True, read_only=True) + subscription_types = serializers.SerializerMethodField(source='get_subscription_types', read_only=True) class Meta: """Meta class.""" @@ -102,3 +103,10 @@ class SubscribeSerializer(serializers.ModelSerializer): 'subscription_types', 'link_to_unsubscribe', ) + + def get_subscription_types(self, obj): + serializer = SubscriptionTypeSerializer( + obj.subscribe_set.filter(unsubscribe_date=None).values_list('subscription_type', flat=True), + many=True + ) + return serializer.data