From 63cc029ce38b83957ad2bb88907f3412883a21b6 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 15 Jan 2020 15:03:38 +0300 Subject: [PATCH] subscriptions read only --- apps/account/models.py | 10 ++++++- apps/account/serializers/back.py | 46 ++++++++++++++++++++++++++++-- apps/account/serializers/common.py | 4 +++ apps/account/views/back.py | 1 + apps/notification/admin.py | 19 +++++++++++- 5 files changed, 75 insertions(+), 5 deletions(-) diff --git a/apps/account/models.py b/apps/account/models.py index 1f050cdb..e82d5189 100644 --- a/apps/account/models.py +++ b/apps/account/models.py @@ -340,6 +340,14 @@ class User(AbstractUser): model='product', ).values_list('object_id', flat=True) + @property + def subscriptions(self): + result = [] + for subscription in self.subscriber.all(): + for item in subscription.active_subscriptions: + result.append(item.id) + return set(result) + class UserRole(ProjectBaseMixin): """UserRole model.""" @@ -380,4 +388,4 @@ class OldRole(models.Model): old_role = models.CharField(verbose_name=_('Old role'), max_length=512, null=True) class Meta: - unique_together = ('new_role', 'old_role') \ No newline at end of file + unique_together = ('new_role', 'old_role') diff --git a/apps/account/serializers/back.py b/apps/account/serializers/back.py index a5a0ccdb..97e6e12f 100644 --- a/apps/account/serializers/back.py +++ b/apps/account/serializers/back.py @@ -45,11 +45,21 @@ class BackUserSerializer(serializers.ModelSerializer): 'last_ip', 'last_country', 'roles', + 'subscriptions', ) extra_kwargs = { 'password': {'write_only': True}, } - read_only_fields = ('old_password', 'last_login', 'date_joined', 'city', 'locale', 'last_ip', 'last_country') + read_only_fields = ( + 'old_password', + 'last_login', + 'date_joined', + 'city', + 'locale', + 'last_ip', + 'last_country', + 'subscriptions', + ) def create(self, validated_data): user = super().create(validated_data) @@ -61,8 +71,38 @@ class BackUserSerializer(serializers.ModelSerializer): class BackDetailUserSerializer(BackUserSerializer): class Meta: model = User - exclude = ('password',) - read_only_fields = ('old_password', 'last_login', 'date_joined') + fields = ( + 'id', + 'last_country', + 'roles', + 'last_login', + 'is_superuser', + 'first_name', + 'last_name', + 'is_staff', + 'is_active', + 'date_joined', + 'username', + 'image_url', + 'cropped_image_url', + 'email', + 'unconfirmed_email', + 'email_confirmed', + 'newsletter', + 'old_id', + 'locale', + 'city', + 'last_ip', + 'groups', + 'user_permissions', + 'subscriptions', + ) + read_only_fields = ( + 'old_password', + 'last_login', + 'date_joined', + 'subscriptions', + ) def create(self, validated_data): user = super().create(validated_data) diff --git a/apps/account/serializers/common.py b/apps/account/serializers/common.py index d9df65e8..7929ad77 100644 --- a/apps/account/serializers/common.py +++ b/apps/account/serializers/common.py @@ -56,6 +56,7 @@ class UserSerializer(serializers.ModelSerializer): 'email_confirmed', 'newsletter', 'roles', + 'subscriptions', ] extra_kwargs = { 'first_name': {'required': False, 'write_only': True, }, @@ -65,6 +66,9 @@ class UserSerializer(serializers.ModelSerializer): 'cropped_image_url': {'required': False, }, 'newsletter': {'required': False, }, } + read_only_fields = ( + 'subscriptions', + ) def create(self, validated_data): user = super(UserSerializer, self).create(validated_data) diff --git a/apps/account/views/back.py b/apps/account/views/back.py index cb68cec6..49185557 100644 --- a/apps/account/views/back.py +++ b/apps/account/views/back.py @@ -27,6 +27,7 @@ class UserListView(generics.ListCreateAPIView): serializer_class = serializers.BackUserSerializer permission_classes = (permissions.IsAdminUser,) filter_backends = (DjangoFilterBackend, OrderingFilter) + filterset_fields = ( 'email_confirmed', 'is_staff', diff --git a/apps/notification/admin.py b/apps/notification/admin.py index 8c38f3f3..5c8a01ec 100644 --- a/apps/notification/admin.py +++ b/apps/notification/admin.py @@ -1,3 +1,20 @@ from django.contrib import admin +from notification import models -# Register your models here. + +@admin.register(models.SubscriptionType) +class SubscriptionTypeAdmin(admin.ModelAdmin): + """SubscriptionType admin.""" + list_display = ['index_name', 'country'] + + +@admin.register(models.Subscriber) +class SubscriberAdmin(admin.ModelAdmin): + """Subscriber admin.""" + raw_id_fields = ('user',) + + +@admin.register(models.Subscribe) +class SubscribeAdmin(admin.ModelAdmin): + """Subscribe admin.""" + raw_id_fields = ('subscriber',)