partner bind/unbind

This commit is contained in:
Kuroshini 2020-01-29 19:59:11 +03:00
parent 0261deb5df
commit 5ad32ad8aa
3 changed files with 42 additions and 24 deletions

View File

@ -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):

View File

@ -8,10 +8,11 @@ app_name = 'partner'
urlpatterns = [
path('', views.PartnerLstView.as_view(), name='partner-list-create'),
path('<int:id>/', views.PartnerRUDView.as_view(), name='partner-rud'),
path('for_establishment/<int:establishment_id>/', views.EstablishmentPartners.as_view(), name='partners-for-establishment'),
path('for_establishment/<int:establishment_id>/', views.EstablishmentPartners.as_view(),
name='partners-for-establishment'),
path('pictures/<int:id>/', views.PartnerPicturesListView.as_view(), name='partner-pictures-get'),
# path('bind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
# name='bind-partner-to-establishment'),
# path('unbind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
# name='unbind-partner-from-establishment'),
path('bind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
name='bind-partner-to-establishment'),
path('unbind/<int:partner_id>/<int:establishment_id>/', views.UnbindPartnerFromEstablishmentView.as_view(),
name='unbind-partner-from-establishment'),
]

View File

@ -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'])