from django.db.transaction import atomic from rest_framework import serializers from apps.users.serializers import PublicUserSerializer from .models import Transaction class TransactionSerializer(serializers.ModelSerializer): payer = PublicUserSerializer(required=False) payee = PublicUserSerializer(required=False, read_only=True) # application_client_id = serializers.IntegerField(required=False, read_only=True) class Meta: model = Transaction fields = ('uuid', 'payer', 'payee', "create", "state", 'amount', 'delay', 'last_update', 'detail_id', # 'application_client_id' ) read_only_fields = ['uuid', 'last_update', 'state', 'create', 'detail_id'] #, 'application_client_id'] def create(self, validated_data): payer = validated_data.get('payer') request = self.context.get('request') user = request.user if request else payer if user == payer: with atomic(): transaction = Transaction.objects.create_transaction(**validated_data) transaction.pay() else: transaction = Transaction.objects.create_transaction(**validated_data) return transaction