Получение неправильного запроса 400: Невозможно отправить набор форм с помощью DRF

У меня есть две модели, одна Voucher и другая Journal. Я создал набор форм с помощью django forms для создания ваучера для набора журналов. Каждый ваучер должен содержать как минимум две транзакции журнала. Вот моя модель ниже:

class Voucher(models.Model):
transactions_date   = models.DateField(default=now)
voucher_type        = models.CharField(max_length=2)
voucher             = models.CharField(max_length=50, blank=True, null=True)
narration           = models.CharField(max_length=100)
debit               = models.DecimalField(max_digits=10, decimal_places=2, default=0)
credit              = models.DecimalField(max_digits=10, decimal_places=2, default=0)
created_at          = models.DateTimeField(auto_now_add=True)
updated_at          = models.DateTimeField(auto_now=True)
created_by          = models.ForeignKey(User,
                               related_name="+", blank=True, null=True,
                               on_delete=models.SET_NULL)
updated_by          = models.ForeignKey(User,
                               related_name="+", blank=True, null=True,
                               on_delete=models.SET_NULL)
is_deleted          = models.BooleanField(default=False)

def __str__(self):
    return str(self.voucher)

class Meta:
    verbose_name = 'Voucher'
    verbose_name_plural = 'Vouchers'
    default_related_name = 'voucher'

def get_voucher(self):
    return self.voucher_type + now().strftime('%Y-%m-%d-' + str(int(self.id)))

def get_debit(self):
    transactions = Journal.objects.filter(voucher=self)
    total = 0
    for item in transactions:
        total += item.debit
    return total

def get_credit(self):
    transactions = Journal.objects.filter(voucher=self)
    total = 0
    for item in transactions:
        total += item.credit
    return total

def save(self, *args, **kwargs):
    self.voucher = self.get_voucher()
    self.debit   = self.get_debit()
    self.credit  = self.get_credit()
    super(Voucher, self).save(*args, **kwargs)

class Journal(models.Model):
account             = models.ForeignKey('Account', blank=True, null=True, on_delete=models.SET_NULL)
voucher             = models.ForeignKey('Voucher', blank=True, null=True, on_delete=models.CASCADE)
debit               = models.DecimalField(max_digits=10, decimal_places=2, default=0)
credit              = models.DecimalField(max_digits=10, decimal_places=2, default=0)
created_at          = models.DateTimeField(auto_now_add=True)
updated_at          = models.DateTimeField(auto_now=True)
created_by          = models.ForeignKey(User,
                               related_name="+", blank=True, null=True,
                               on_delete=models.SET_NULL)
updated_by          = models.ForeignKey(User,
                               related_name="+", blank=True, null=True,
                               on_delete=models.SET_NULL)
is_deleted          = models.BooleanField(default=False)


def __str__(self):
    return self.voucher


class Meta:
    verbose_name = 'Journal'
    verbose_name_plural = 'Journals'
    default_related_name = 'journal'

Я создал сериализаторы для этой модели следующим образом:

class JournalSerializer(serializers.ModelSerializer):
created_by = serializers.CharField(source="created_by.username", read_only=True)
updated_by = serializers.CharField(source="updated_by.username", read_only=True)
created_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT, required=False)
updated_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT, required=False)

class Meta:
    model = Journal
    fields = ('id', 'account', 'voucher', 'debit', 'credit', 'created_at', 'updated_at', 'created_by', 'updated_by')

class VoucherSerializer(serializers.ModelSerializer):
    voucher    = JournalSerializer(many=True, read_only=False)
    created_by = serializers.CharField(source="created_by.username", read_only=True)
    updated_by = serializers.CharField(source="updated_by.username", read_only=True)
    created_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT, required=False)
    updated_at = serializers.DateTimeField(format=settings.DATETIME_FORMAT, required=False)

class Meta:
    model = Voucher
    fields = ('id', 'transactions_date', 'voucher_type', 'voucher', 'debit', 'credit', 'narration', 'created_at', 'updated_at', 'created_by', 'updated_by')

def create(self, validated_data):
    journal_data = validated_data.pop('voucher')
    voucher = Voucher.objects.create(**validated_data)
    for journal in journal_data:
        Journal.objects.create(voucher=voucher, **journal)
    return voucher

Этот набор представлений, который я вызываю через Ajax:

class VoucherViewSet(viewsets.ModelViewSet):
queryset = Voucher.objects.all()
serializer_class = VoucherSerializer
permission_classes = [IsAuthenticated]

def list(self, request, **kwargs):
    try:
        voucher = query_voucher_by_args(**request.query_params)
        serializer = VoucherSerializer(voucher['items'], many=True)
        result = dict()
        result['data'] = serializer.data
        result['draw'] = voucher['draw']
        result['recordsTotal'] = voucher['total']
        result['recordsFiltered'] = voucher['count']
        return Response(result, status=status.HTTP_200_OK, template_name=None, content_type=None)

    except Exception as e:
        return Response(str(e), status=status.HTTP_404_NOT_FOUND, template_name=None, content_type=None)

def create(self, request, *args, **kwargs):
    data = dict()
    serializer = self.get_serializer(data=request.data)
    
    if not serializer.is_valid(raise_exception=True):
        data['form_is_valid'] = False
        data['message'] = serializer.errors #"Form validation error!"
        return Response(data, status=status.HTTP_400_BAD_REQUEST)
    else:
        self.perform_create(serializer)    
        headers = self.get_success_headers(serializer.data)
        data['form_is_valid'] = True
        data['message'] = "Successful saved."
    return Response(data, status=status.HTTP_201_CREATED, headers=headers)

def perform_create(self, serializer):
        serializer.save(created_by=self.request.user, updated_by=self.request.user)

Я получаю эту ошибку: "POST /api/accounting/accounts-journal/create/ HTTP/1.1" 400 172 Я никогда раньше не публиковал набор форм с DRF, любая помощь будет для меня очень полезна.

Вернуться на верх