diff --git a/apps/partner/serializers/back.py b/apps/partner/serializers/back.py index fb424970..09341f78 100644 --- a/apps/partner/serializers/back.py +++ b/apps/partner/serializers/back.py @@ -4,6 +4,8 @@ from partner.models import Partner, PartnerToEstablishment from establishment.serializers import EstablishmentShortSerializer from location.serializers import CountrySimpleSerializer from location.models import Country +from django.shortcuts import get_object_or_404 +from establishment.models import Establishment class BackPartnerSerializer(serializers.ModelSerializer): @@ -38,13 +40,14 @@ class BackPartnerSerializer(serializers.ModelSerializer): class PartnersForEstablishmentSerializer(serializers.ModelSerializer): - id = serializers.IntegerField(source='partner.pk') - name = serializers.CharField(source='partner.name') - type = serializers.IntegerField(source='partner.type') - type_display = serializers.CharField(source='partner.type_display') - starting_date = serializers.DateField(source='partner.starting_date') - expiry_date = serializers.DateField(source='partner.expiry_date') - price_per_month = serializers.DecimalField(source='partner.price_per_month', max_digits=10, decimal_places=2) + 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) + 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: @@ -58,10 +61,20 @@ class PartnersForEstablishmentSerializer(serializers.ModelSerializer): 'expiry_date', 'price_per_month', 'country', - 'url', - 'image', + 'url', # own field + 'image', # own field ) + def create(self, validated_data): + establishment_id = self.context['view'].kwargs['establishment_id'] + partner_id = self.context['view'].kwargs['partner_id'] + establishment = get_object_or_404(Establishment, pk=establishment_id) + partner = get_object_or_404(Partner, pk=partner_id) + instance = PartnerToEstablishment.objects.create(**validated_data, + establishment=establishment, + partner=partner) + return instance + class PartnerPicturesSerializer(serializers.ModelSerializer): diff --git a/apps/partner/urls/back.py b/apps/partner/urls/back.py index 3d13e623..94829235 100644 --- a/apps/partner/urls/back.py +++ b/apps/partner/urls/back.py @@ -8,10 +8,11 @@ app_name = 'partner' urlpatterns = [ path('', views.PartnerLstView.as_view(), name='partner-list-create'), path('/', views.PartnerRUDView.as_view(), name='partner-rud'), - path('for_establishment//', views.EstablishmentPartners.as_view(), name='partners-for-establishment'), + path('for_establishment//', views.EstablishmentPartners.as_view(), + name='partners-for-establishment'), path('pictures//', views.PartnerPicturesListView.as_view(), name='partner-pictures-get'), - # path('bind///', views.BindPartnerToEstablishmentView.as_view(), - # name='bind-partner-to-establishment'), - # path('unbind///', views.BindPartnerToEstablishmentView.as_view(), - # name='unbind-partner-from-establishment'), + path('bind///', views.BindPartnerToEstablishmentView.as_view(), + name='bind-partner-to-establishment'), + 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 1594b7cf..eb35ddf0 100644 --- a/apps/partner/views/back.py +++ b/apps/partner/views/back.py @@ -1,5 +1,6 @@ from rest_framework import generics, permissions +from django.shortcuts import get_object_or_404 from partner import filters from partner.models import Partner, PartnerToEstablishment from partner.serializers import back as serializers @@ -14,7 +15,6 @@ class PartnerLstView(generics.ListCreateAPIView): serializer_class = serializers.BackPartnerSerializer pagination_class = None permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] - # permission_classes = (permissions.AllowAny, ) filter_class = filters.PartnerFilterSet @@ -23,7 +23,6 @@ class EstablishmentPartners(generics.ListAPIView): serializer_class = serializers.PartnersForEstablishmentSerializer pagination_class = None permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] - # filter_class = filters.PartnerFilterSet def get_queryset(self): return super().get_queryset().filter(establishment=self.kwargs['establishment_id']) @@ -34,7 +33,6 @@ class PartnerRUDView(generics.RetrieveUpdateDestroyAPIView): queryset = Partner.objects.with_base_related() serializer_class = serializers.BackPartnerSerializer permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] - # permission_classes = (permissions.AllowAny, ) lookup_field = 'id' @@ -42,12 +40,18 @@ class PartnerPicturesListView(generics.RetrieveAPIView): lookup_field = 'id' serializer_class = serializers.PartnerPicturesSerializer queryset = Partner.objects.with_base_related() - # permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] - permission_classes = (permissions.AllowAny, ) - -# class BindPartnerToEstablishmentView(generics.GenericAPIView): -# pass + permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] -# class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView): -# pass +class BindPartnerToEstablishmentView(generics.CreateAPIView): + serializer_class = serializers.PartnersForEstablishmentSerializer + permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] + + +class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView): + serializer_class = serializers.PartnersForEstablishmentSerializer + permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] + + def get_object(self): + return get_object_or_404(PartnerToEstablishment, establishment_id=self.kwargs['establishment_id'], + partner_id=self.kwargs['partner_id'])