From 442e26cfe49c800a2d31e9e6072bbbb9c3783170 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 30 Jan 2020 16:37:41 +0300 Subject: [PATCH] partners web --- apps/partner/models.py | 18 ++++++++++-------- apps/partner/serializers/common.py | 21 +++++++++++++++------ apps/partner/views/back.py | 2 +- apps/partner/views/common.py | 4 ++-- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/apps/partner/models.py b/apps/partner/models.py index c4cf4e89..3172dca6 100644 --- a/apps/partner/models.py +++ b/apps/partner/models.py @@ -10,14 +10,7 @@ from utils.models import ImageMixin, ProjectBaseMixin class PartnerQueryset(models.QuerySet): def with_base_related(self): - return self.prefetch_related('establishment__establishment_type', 'establishment__establishment_subtypes', - 'establishment__awards', 'establishment__schedule', 'establishment__phones', - 'establishment__gallery', 'establishment__menu_set', - 'establishment__menu_set__plates', 'establishment__menu_set__plates__currency', - 'establishment__currency', 'establishment__address__city', - 'establishment__address__city__region', - 'establishment__address__city__region__country', - 'establishment__address__city__country', 'country') + return self.prefetch_related('partnertoestablishment_set', 'country') class Partner(ProjectBaseMixin): @@ -55,6 +48,12 @@ class Partner(ProjectBaseMixin): return self.MODEL_TYPES[self.type][1] +class PartnerToEstablishmentQuerySet(models.QuerySet): + + def with_base_related(self): + return self.prefetch_related('partner', 'partner__country') + + class PartnerToEstablishment(models.Model): partner_bind_date = models.DateTimeField(default=timezone.now, editable=False, verbose_name=_('Date partner binded')) @@ -65,3 +64,6 @@ class PartnerToEstablishment(models.Model): image = models.URLField(verbose_name=_('Partner image URL'), null=True) partner = models.ForeignKey(Partner, on_delete=models.CASCADE, null=True) establishment = models.ForeignKey('establishment.Establishment', on_delete=models.CASCADE, null=True) + + objects = PartnerToEstablishmentQuerySet.as_manager() + diff --git a/apps/partner/serializers/common.py b/apps/partner/serializers/common.py index 83053f26..fa23700b 100644 --- a/apps/partner/serializers/common.py +++ b/apps/partner/serializers/common.py @@ -4,13 +4,22 @@ from partner import models # Serializers -class PartnerSerializer(serializers.ModelSerializer): - """Serializer for model Partner""" +class PartnersForEstablishmentSerializer(serializers.ModelSerializer): + id = serializers.IntegerField(source='partner.pk', read_only=True) + name = serializers.CharField(source='partner.name', read_only=True) + type = serializers.IntegerField(source='partner.type', read_only=True) + type_display = serializers.CharField(source='partner.type_display', read_only=True) + class Meta: - """Meta class""" - model = models.Partner + model = models.PartnerToEstablishment fields = ( 'id', - # 'image', - 'url' + 'name', + 'type', + 'type_display', + 'starting_date', # own field + 'expiry_date', # own field + 'price_per_month', # own field + 'url', # own field + 'image', # own field ) diff --git a/apps/partner/views/back.py b/apps/partner/views/back.py index f440dca0..f6e2de89 100644 --- a/apps/partner/views/back.py +++ b/apps/partner/views/back.py @@ -25,7 +25,7 @@ class PartnerLstView(generics.ListCreateAPIView): class EstablishmentPartners(generics.ListAPIView): - queryset = PartnerToEstablishment.objects.prefetch_related('partner', 'partner__country') + queryset = PartnerToEstablishment.objects.with_base_related() serializer_class = serializers.PartnersForEstablishmentSerializer pagination_class = None filter_class = filters.PartnerToEstablishmentFilterSet diff --git a/apps/partner/views/common.py b/apps/partner/views/common.py index 3c45fb6b..dc319650 100644 --- a/apps/partner/views/common.py +++ b/apps/partner/views/common.py @@ -8,7 +8,7 @@ from partner.serializers import common as serializers # Mixins class PartnerViewMixin(generics.GenericAPIView): """View mixin for Partner views""" - queryset = models.Partner.objects.distinct("name") + queryset = models.PartnerToEstablishment.objects.with_base_related() # Views @@ -16,4 +16,4 @@ class PartnerListView(PartnerViewMixin, generics.ListAPIView): """List Partner view""" pagination_class = None permission_classes = (permissions.AllowAny, ) - serializer_class = serializers.PartnerSerializer + serializer_class = serializers.PartnersForEstablishmentSerializer