From 7b8f42e6d62f07c209b903f2a30b0bb91aaac83c Mon Sep 17 00:00:00 2001 From: gzbender Date: Fri, 14 Sep 2018 15:09:42 +0500 Subject: [PATCH] =?UTF-8?q?LIL-657=20=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=B8=20=D0=B2=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/serializers/payment.py | 54 ++++++++++++++++++++++++++++++++--- api/v1/views.py | 20 +++++++++++-- 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index 6268a63d..79a8d464 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -71,6 +71,26 @@ class AuthorBalanceSerializer(serializers.ModelSerializer): ) +class PaymentCreateSerializer(serializers.ModelSerializer): + + class Meta: + model = Payment + # fields = ( + # 'weekdays', + # 'date_start', + # 'date_end', + # ) + fields = '__all__' + read_only_fields = ( + 'id', + 'user', + 'created_at', + 'update_at', + ) + + + + class PaymentSerializer(serializers.ModelSerializer): user = UserSerializer() @@ -91,13 +111,33 @@ class PaymentSerializer(serializers.ModelSerializer): return SchoolPaymentSerializer(instance, context=self.context).to_representation(instance) -class CoursePaymentSerializer(serializers.ModelSerializer): +class CoursePaymentCreateSerializer(serializers.ModelSerializer): + class Meta: + model = CoursePayment + fields = BASE_PAYMENT_FIELDS + ('course',) + read_only_fields = ( + 'id', + 'user', + 'course', + 'created_at', + 'update_at', + ) + + +class CoursePaymentSerializer(CoursePaymentCreateSerializer): user = UserSerializer() course = CourseSerializer() + +class SchoolPaymentCreateSerializer(serializers.ModelSerializer): + user = UserSerializer() class Meta: - model = CoursePayment - fields = BASE_PAYMENT_FIELDS + ('course',) + model = SchoolPayment + fields = BASE_PAYMENT_FIELDS + ( + 'weekdays', + 'date_start', + 'date_end', + ) read_only_fields = ( 'id', 'user', @@ -106,8 +146,14 @@ class CoursePaymentSerializer(serializers.ModelSerializer): 'update_at', ) + def to_representation(self, instance): + if isinstance(instance, CoursePayment): + return CoursePaymentSerializer(instance, context=self.context).to_representation(instance) + elif isinstance(instance, SchoolPayment): + return SchoolPaymentSerializer(instance, context=self.context).to_representation(instance) + -class SchoolPaymentSerializer(serializers.ModelSerializer): +class SchoolPaymentSerializer(SchoolPaymentCreateSerializer): user = UserSerializer() class Meta: diff --git a/api/v1/views.py b/api/v1/views.py index d5dae90d..b12240c2 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -34,7 +34,7 @@ from .serializers.payment import ( AuthorBalanceSerializer, AuthorBalanceCreateSerializer, PaymentSerializer, CoursePaymentSerializer, SchoolPaymentSerializer, -) + PaymentCreateSerializer, CoursePaymentCreateSerializer, SchoolPaymentCreateSerializer) from .serializers.user import ( AuthorRequestSerializer, UserSerializer, UserPhotoSerializer, @@ -455,7 +455,11 @@ class AuthorRequestViewSet(ExtendedModelViewSet): class PaymentViewSet(ExtendedModelViewSet): queryset = Payment.objects.all() - serializer_class = PaymentSerializer + serializer_class = PaymentCreateSerializer + serializer_class_map = { + 'list': PaymentSerializer, + 'retrieve': PaymentSerializer, + } permission_classes = (IsAdmin,) filter_fields = ('status', 'user',) ordering_fields = ( @@ -465,6 +469,18 @@ class PaymentViewSet(ExtendedModelViewSet): ) search_fields = ('user__email', 'user__first_name', 'user__last_name',) + def get_serializer(self, instance, *args, **kwargs): + print('instance', type(instance), self.action) + serializer_class = self.get_serializer_class() + if self.action == 'partial_update': + if isinstance(instance, CoursePayment): + serializer_class = CoursePaymentCreateSerializer + elif isinstance(instance, SchoolPayment): + serializer_class = SchoolPaymentCreateSerializer + print('serializer_class', serializer_class) + kwargs['context'] = self.get_serializer_context() + return serializer_class(*args, **kwargs) + def get_queryset(self): queryset = self.queryset course = self.request.query_params.get('course')