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