From 632233d930dc7875f890405f7b8a4d5604251512 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 30 Jan 2020 15:43:25 +0300 Subject: [PATCH] partners remastered (moved fields to binding table) --- apps/partner/filters.py | 20 ++++++++++++++++++-- apps/partner/models.py | 6 +++--- apps/partner/serializers/back.py | 16 ++++++---------- apps/partner/urls/back.py | 2 +- apps/partner/views/back.py | 4 ++-- apps/transfer/serializers/partner.py | 7 +++++++ 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/apps/partner/filters.py b/apps/partner/filters.py index 1965fd03..952f8414 100644 --- a/apps/partner/filters.py +++ b/apps/partner/filters.py @@ -1,7 +1,7 @@ """Partner app filters.""" from django_filters import rest_framework as filters -from partner.models import Partner +from partner.models import Partner, PartnerToEstablishment from django.core.validators import EMPTY_VALUES @@ -31,4 +31,20 @@ class PartnerFilterSet(filters.FilterSet): if 'date_bind' in value: value = value.replace('date_bind', 'partnertoestablishment__partner_bind_date') queryset = queryset.order_by(value) - return queryset \ No newline at end of file + return queryset + + +class PartnerToEstablishmentFilterSet(filters.FilterSet): + """Partner to establishment filter set.""" + + type = filters.ChoiceFilter( + field_name='partner__type', + choices=Partner.MODEL_TYPES, + help_text=f'Allows to filter partner list by partner type. ' + f'Enum: {dict(Partner.MODEL_TYPES)}') + + class Meta: + model = PartnerToEstablishment + fields = ( + 'type', + ) diff --git a/apps/partner/models.py b/apps/partner/models.py index e50fd939..c4cf4e89 100644 --- a/apps/partner/models.py +++ b/apps/partner/models.py @@ -39,9 +39,6 @@ class Partner(ProjectBaseMixin): through='PartnerToEstablishment', verbose_name=_('Establishments')) type = models.PositiveSmallIntegerField(choices=MODEL_TYPES, default=PARTNER) - starting_date = models.DateField(_('starting date'), blank=True, null=True) - expiry_date = models.DateField(_('expiry date'), blank=True, null=True) - price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True) country = models.ForeignKey('location.Country', null=True, default=None, on_delete=models.SET_NULL) objects = PartnerQueryset.as_manager() @@ -61,6 +58,9 @@ class Partner(ProjectBaseMixin): class PartnerToEstablishment(models.Model): partner_bind_date = models.DateTimeField(default=timezone.now, editable=False, verbose_name=_('Date partner binded')) + starting_date = models.DateField(_('starting date'), blank=True, null=True) + expiry_date = models.DateField(_('expiry date'), blank=True, null=True) + price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True) url = models.URLField(verbose_name=_('Establishment to Partner URL'), null=True, blank=True, default=None) image = models.URLField(verbose_name=_('Partner image URL'), null=True) partner = models.ForeignKey(Partner, on_delete=models.CASCADE, null=True) diff --git a/apps/partner/serializers/back.py b/apps/partner/serializers/back.py index 09341f78..ee8af22b 100644 --- a/apps/partner/serializers/back.py +++ b/apps/partner/serializers/back.py @@ -23,13 +23,11 @@ class BackPartnerSerializer(serializers.ModelSerializer): model = Partner fields = ( 'id', + 'bind_id', 'name', 'images', 'type', 'type_display', - 'starting_date', - 'expiry_date', - 'price_per_month', 'country', 'country_id', # 'establishments', @@ -41,25 +39,23 @@ class BackPartnerSerializer(serializers.ModelSerializer): class PartnersForEstablishmentSerializer(serializers.ModelSerializer): id = serializers.IntegerField(source='partner.pk', read_only=True) + bind_id = serializers.IntegerField(source='id', 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) - starting_date = serializers.DateField(source='partner.starting_date', read_only=True) - expiry_date = serializers.DateField(source='partner.expiry_date', read_only=True) - price_per_month = serializers.DecimalField(source='partner.price_per_month', max_digits=10, decimal_places=2, - read_only=True) country = CountrySimpleSerializer(read_only=True, source='partner.country') class Meta: model = PartnerToEstablishment fields = ( 'id', + 'bind_id', 'name', 'type', 'type_display', - 'starting_date', - 'expiry_date', - 'price_per_month', + 'starting_date', # own field + 'expiry_date', # own field + 'price_per_month', # own field 'country', 'url', # own field 'image', # own field diff --git a/apps/partner/urls/back.py b/apps/partner/urls/back.py index 94829235..a20789f2 100644 --- a/apps/partner/urls/back.py +++ b/apps/partner/urls/back.py @@ -13,6 +13,6 @@ urlpatterns = [ path('pictures//', views.PartnerPicturesListView.as_view(), name='partner-pictures-get'), path('bind///', views.BindPartnerToEstablishmentView.as_view(), name='bind-partner-to-establishment'), - path('unbind///', views.UnbindPartnerFromEstablishmentView.as_view(), + path('unbind//', views.UnbindPartnerFromEstablishmentView.as_view(), name='unbind-partner-from-establishment'), ] diff --git a/apps/partner/views/back.py b/apps/partner/views/back.py index c130ed4a..11f527bb 100644 --- a/apps/partner/views/back.py +++ b/apps/partner/views/back.py @@ -28,6 +28,7 @@ class EstablishmentPartners(generics.ListAPIView): queryset = PartnerToEstablishment.objects.prefetch_related('partner', 'partner__country') serializer_class = serializers.PartnersForEstablishmentSerializer pagination_class = None + # filter_class = filters.PartnerToEstablishmentFilterSet filter_backends = (OrderingFilter, DjangoFilterBackend) ordering_fields = '__all__' ordering = '-partner_bind_date' @@ -77,5 +78,4 @@ class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView): ) def get_object(self): - return get_object_or_404(PartnerToEstablishment, establishment_id=self.kwargs['establishment_id'], - partner_id=self.kwargs['partner_id']) + return get_object_or_404(PartnerToEstablishment, pk=self.kwargs['bind_id']) diff --git a/apps/transfer/serializers/partner.py b/apps/transfer/serializers/partner.py index 2bfc7183..d047b2a7 100644 --- a/apps/transfer/serializers/partner.py +++ b/apps/transfer/serializers/partner.py @@ -50,6 +50,10 @@ class PartnerSerializer(serializers.Serializer): old_id = validated_data.pop('old_id') created = validated_data.pop('created') + expiry_date = validated_data.pop('expiry_date') + price_per_month = validated_data.pop('price_per_month') + starting_date = validated_data.pop('starting_date') + obj, is_created = Partner.objects.update_or_create( # old_id=validated_data['old_id'], **validated_data @@ -68,6 +72,9 @@ class PartnerSerializer(serializers.Serializer): p_t_e = PartnerToEstablishment.objects.filter(establishment=establishment, partner=obj).first() p_t_e.url = url p_t_e.image = image + p_t_e.expiry_date = expiry_date + p_t_e.price_per_month = price_per_month + p_t_e.starting_date = starting_date p_t_e.save() return obj