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 establishment.serializers import EstablishmentShortSerializer
from location.serializers import CountrySimpleSerializer from location.serializers import CountrySimpleSerializer
from location.models import Country from location.models import Country
from django.shortcuts import get_object_or_404
from establishment.models import Establishment
class BackPartnerSerializer(serializers.ModelSerializer): class BackPartnerSerializer(serializers.ModelSerializer):
@ -38,13 +40,14 @@ class BackPartnerSerializer(serializers.ModelSerializer):
class PartnersForEstablishmentSerializer(serializers.ModelSerializer): class PartnersForEstablishmentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='partner.pk') id = serializers.IntegerField(source='partner.pk', read_only=True)
name = serializers.CharField(source='partner.name') name = serializers.CharField(source='partner.name', read_only=True)
type = serializers.IntegerField(source='partner.type') type = serializers.IntegerField(source='partner.type', read_only=True)
type_display = serializers.CharField(source='partner.type_display') type_display = serializers.CharField(source='partner.type_display', read_only=True)
starting_date = serializers.DateField(source='partner.starting_date') starting_date = serializers.DateField(source='partner.starting_date', read_only=True)
expiry_date = serializers.DateField(source='partner.expiry_date') 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) 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') country = CountrySimpleSerializer(read_only=True, source='partner.country')
class Meta: class Meta:
@ -58,10 +61,20 @@ class PartnersForEstablishmentSerializer(serializers.ModelSerializer):
'expiry_date', 'expiry_date',
'price_per_month', 'price_per_month',
'country', 'country',
'url', 'url', # own field
'image', '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): class PartnerPicturesSerializer(serializers.ModelSerializer):

View File

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

View File

@ -1,5 +1,6 @@
from rest_framework import generics, permissions from rest_framework import generics, permissions
from django.shortcuts import get_object_or_404
from partner import filters from partner import filters
from partner.models import Partner, PartnerToEstablishment from partner.models import Partner, PartnerToEstablishment
from partner.serializers import back as serializers from partner.serializers import back as serializers
@ -14,7 +15,6 @@ class PartnerLstView(generics.ListCreateAPIView):
serializer_class = serializers.BackPartnerSerializer serializer_class = serializers.BackPartnerSerializer
pagination_class = None pagination_class = None
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
# permission_classes = (permissions.AllowAny, )
filter_class = filters.PartnerFilterSet filter_class = filters.PartnerFilterSet
@ -23,7 +23,6 @@ class EstablishmentPartners(generics.ListAPIView):
serializer_class = serializers.PartnersForEstablishmentSerializer serializer_class = serializers.PartnersForEstablishmentSerializer
pagination_class = None pagination_class = None
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
# filter_class = filters.PartnerFilterSet
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(establishment=self.kwargs['establishment_id']) return super().get_queryset().filter(establishment=self.kwargs['establishment_id'])
@ -34,7 +33,6 @@ class PartnerRUDView(generics.RetrieveUpdateDestroyAPIView):
queryset = Partner.objects.with_base_related() queryset = Partner.objects.with_base_related()
serializer_class = serializers.BackPartnerSerializer serializer_class = serializers.BackPartnerSerializer
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
# permission_classes = (permissions.AllowAny, )
lookup_field = 'id' lookup_field = 'id'
@ -42,12 +40,18 @@ class PartnerPicturesListView(generics.RetrieveAPIView):
lookup_field = 'id' lookup_field = 'id'
serializer_class = serializers.PartnerPicturesSerializer serializer_class = serializers.PartnerPicturesSerializer
queryset = Partner.objects.with_base_related() queryset = Partner.objects.with_base_related()
# permission_classes = [permissions.IsAdminUser | IsEstablishmentManager] permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
permission_classes = (permissions.AllowAny, )
# class BindPartnerToEstablishmentView(generics.GenericAPIView):
# pass
# class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView): class BindPartnerToEstablishmentView(generics.CreateAPIView):
# pass 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'])