From dd1b241c41b89a4f58e753402b667432340825e5 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 23 Jan 2020 18:26:02 +0300 Subject: [PATCH] verbose award_type for API --- apps/main/models.py | 8 ++++++++ apps/main/serializers/common.py | 13 +++++++++++++ apps/main/views/back.py | 4 ++-- apps/main/views/common.py | 4 ++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/main/models.py b/apps/main/models.py index 8856bec5..605cb4e3 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -175,6 +175,12 @@ class SiteFeature(ProjectBaseMixin): unique_together = ('site_settings', 'feature') +class AwardQuerySet(models.QuerySet): + + def with_base_related(self): + return self.prefetch_related('award_type') + + class Award(TranslatedFieldsMixin, URLImageMixin, models.Model): """Award model.""" WAITING = 0 @@ -200,6 +206,8 @@ class Award(TranslatedFieldsMixin, URLImageMixin, models.Model): old_id = models.IntegerField(null=True, blank=True) + objects = AwardQuerySet.as_manager() + def __str__(self): title = 'None' lang = TranslationSettings.get_solo().default_language diff --git a/apps/main/serializers/common.py b/apps/main/serializers/common.py index 9eccd718..17477cb0 100644 --- a/apps/main/serializers/common.py +++ b/apps/main/serializers/common.py @@ -192,6 +192,15 @@ class SiteShortSerializer(serializers.ModelSerializer): ] +class AwardTypeBaseSerializer(serializers.ModelSerializer): + class Meta: + model = models.AwardType + fields = ( + 'id', + 'name', + ) + + class AwardBaseSerializer(serializers.ModelSerializer): """Award base serializer.""" @@ -210,6 +219,8 @@ class AwardBaseSerializer(serializers.ModelSerializer): class AwardSerializer(AwardBaseSerializer): """Award serializer.""" + award_type = AwardTypeBaseSerializer(read_only=True) + class Meta: model = models.Award fields = AwardBaseSerializer.Meta.fields + ['award_type', ] @@ -218,6 +229,8 @@ class AwardSerializer(AwardBaseSerializer): class BackAwardSerializer(AwardBaseSerializer): """Award serializer.""" + award_type = AwardTypeBaseSerializer(read_only=True) + class Meta: model = models.Award fields = AwardBaseSerializer.Meta.fields + [ diff --git a/apps/main/views/back.py b/apps/main/views/back.py index a8974721..92acd83e 100644 --- a/apps/main/views/back.py +++ b/apps/main/views/back.py @@ -15,7 +15,7 @@ from main.views import SiteSettingsView, SiteListView class AwardLstView(generics.ListCreateAPIView): """Award list create view.""" - queryset = Award.objects.all() + queryset = Award.objects.all().with_base_related() serializer_class = serializers.BackAwardSerializer permission_classes = (permissions.IsAdminUser,) filterset_class = AwardFilter @@ -23,7 +23,7 @@ class AwardLstView(generics.ListCreateAPIView): class AwardRUDView(generics.RetrieveUpdateDestroyAPIView): """Award RUD view.""" - queryset = Award.objects.all() + queryset = Award.objects.all().with_base_related() serializer_class = serializers.BackAwardSerializer permission_classes = (permissions.IsAdminUser,) lookup_field = 'id' diff --git a/apps/main/views/common.py b/apps/main/views/common.py index 922261cb..ef779a37 100644 --- a/apps/main/views/common.py +++ b/apps/main/views/common.py @@ -53,14 +53,14 @@ from utils.serializers import EmptySerializer class AwardView(generics.ListAPIView): """Awards list view.""" serializer_class = serializers.AwardSerializer - queryset = models.Award.objects.all() + queryset = models.Award.objects.all().with_base_related() permission_classes = (permissions.AllowAny,) class AwardRetrieveView(generics.RetrieveAPIView): """Award retrieve view.""" serializer_class = serializers.AwardSerializer - queryset = models.Award.objects.all() + queryset = models.Award.objects.all().with_base_related() permission_classes = (permissions.IsAuthenticatedOrReadOnly,)