diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index 0d4aec8b..432310d8 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -68,7 +68,6 @@ class PaymentSerializer(serializers.ModelSerializer): class AuthorBalanceSerializer(serializers.ModelSerializer): author = UserSerializer() - # payment = PaymentSerializer() payment = serializers.SerializerMethodField() class Meta: @@ -111,6 +110,40 @@ class AuthorBalanceSerializer(serializers.ModelSerializer): return data +class PaymentSerializer(serializers.ModelSerializer): + user = UserSerializer() + + class Meta: + model = Payment + fields = BASE_PAYMENT_FIELDS + read_only_fields = ( + 'id', + 'user', + 'created_at', + '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 CoursePaymentCreateSerializer(serializers.ModelSerializer): + + class Meta: + model = CoursePayment + fields = BASE_PAYMENT_FIELDS + ('course',) + read_only_fields = ( + 'id', + 'user', + 'course', + 'created_at', + 'update_at', + ) + + class CoursePaymentSerializer(serializers.ModelSerializer): user = UserSerializer() course = CourseSerializer() @@ -127,6 +160,24 @@ class CoursePaymentSerializer(serializers.ModelSerializer): ) +class SchoolPaymentCreateSerializer(serializers.ModelSerializer): + + class Meta: + model = SchoolPayment + fields = BASE_PAYMENT_FIELDS + ( + 'weekdays', + 'date_start', + 'date_end', + ) + read_only_fields = ( + 'id', + 'user', + 'course', + 'created_at', + 'update_at', + ) + + class SchoolPaymentSerializer(serializers.ModelSerializer): user = UserSerializer() diff --git a/api/v1/views.py b/api/v1/views.py index d5dae90d..c161a90d 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -34,7 +34,7 @@ from .serializers.payment import ( AuthorBalanceSerializer, AuthorBalanceCreateSerializer, PaymentSerializer, CoursePaymentSerializer, SchoolPaymentSerializer, -) + CoursePaymentCreateSerializer, SchoolPaymentCreateSerializer) from .serializers.user import ( AuthorRequestSerializer, UserSerializer, UserPhotoSerializer, @@ -453,7 +453,7 @@ class AuthorRequestViewSet(ExtendedModelViewSet): filter_fields = ('status',) -class PaymentViewSet(ExtendedModelViewSet): +class PaymentViewSet(viewsets.ModelViewSet): queryset = Payment.objects.all() serializer_class = PaymentSerializer permission_classes = (IsAdmin,) @@ -465,6 +465,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 'update' in self.action: + 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(instance, *args, **kwargs) + def get_queryset(self): queryset = self.queryset course = self.request.query_params.get('course')