diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index 6268a63d..0d4aec8b 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -46,8 +46,30 @@ class AuthorBalanceCreateSerializer(serializers.ModelSerializer): return AuthorBalanceSerializer(instance, context=self.context).to_representation(instance) +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 AuthorBalanceSerializer(serializers.ModelSerializer): author = UserSerializer() + # payment = PaymentSerializer() + payment = serializers.SerializerMethodField() class Meta: model = AuthorBalance @@ -70,25 +92,23 @@ class AuthorBalanceSerializer(serializers.ModelSerializer): 'payment', ) - -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) + def get_payment(self, instance): + try: + p = instance.payment + except Exception: + return None + data = { + 'id': p.id, + 'created_at': p.created_at, + 'amount': p.amount, + 'data': p.data, + } + if isinstance(instance.payment, CoursePayment): + data['course'] = { + 'id': p.course.id, + 'title': p.course.title, + } + return data class CoursePaymentSerializer(serializers.ModelSerializer):