diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index 93400cbf..9174177d 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -1,9 +1,37 @@ from rest_framework import serializers from apps.payment.models import AuthorBalance +from .user import UserSerializer + + +class AuthorBalanceCreateSerializer(serializers.ModelSerializer): + + class Meta: + model = AuthorBalance + fields = ( + 'id', + 'author', + 'type', + 'amount', + 'commission', + 'status', + 'payment', + 'cause', + ) + + read_only_fields = ( + 'id', + 'author', + 'type', + 'payment', + ) + + def to_representation(self, instance): + return AuthorBalanceSerializer(instance, context=self.context).to_representation(instance) class AuthorBalanceSerializer(serializers.ModelSerializer): + author = UserSerializer() class Meta: model = AuthorBalance diff --git a/api/v1/views.py b/api/v1/views.py index 6958934c..ad4b1402 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -24,7 +24,7 @@ from .serializers.content import ( ImageObjectSerializer, ) from .serializers.school import SchoolScheduleSerializer -from .serializers.payment import AuthorBalanceSerializer +from .serializers.payment import AuthorBalanceSerializer, AuthorBalanceCreateSerializer from .serializers.user import ( UserSerializer, UserPhotoSerializer, ) @@ -43,9 +43,12 @@ User = get_user_model() class AuthorBalanceViewSet(ExtendedModelViewSet): queryset = AuthorBalance.objects.all() - serializer_class = AuthorBalanceSerializer + serializer_class = AuthorBalanceCreateSerializer + serializer_class_map = { + 'list': AuthorBalanceSerializer, + } permission_classes = (IsAdmin,) - filter_fields = ('status', 'type') + filter_fields = ('author', 'status', 'type') search_fields = ( 'author__email', 'author__first_name', diff --git a/apps/payment/models.py b/apps/payment/models.py index e25fb6ab..dc8426dd 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -34,7 +34,7 @@ class AuthorBalance(models.Model): commission = models.DecimalField('Комиссия', max_digits=8, decimal_places=2, default=0) status = models.PositiveSmallIntegerField('Статус', choices=STATUS_CHOICES, default=0) payment = models.OneToOneField('Payment', on_delete=models.CASCADE, null=True, blank=True, verbose_name='Платёж') - cause = models.TextField('Причина отказа', default='') + cause = models.TextField('Причина отказа', null=True, blank=True) class Meta: verbose_name = 'Баланс'