{'required': 'Это поле обязательно для заполнения.', 'null': 'Это поле не может быть нулевым.', 'invalid': 'Неверные данные. Ожидали словарь, а получили {datatype}.'}

Это ошибка, которую выдает serializer.is_valid(). Я не знаю, почему возникает эта ошибка. Я новичок в Django Rest Framework. Я пытаюсь сделать простой api для генерации счетов, который принимает информацию о продавце, покупателе, товарах и генерирует счет. Поэтому я пишу модели для каждого и одну модель для инвойса, в которой продавец, покупатель являются внешними ключами. Модель товара связана с моделью счета через внешний ключ. Любая помощь будет принята с благодарностью.

Это мой models.py

    class Seller(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=50)
        phone = models.CharField(max_length=12)
        address = models.CharField(max_length=200)
    
        def __str__(self):
            return self.name
    
    class Buyer(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=50)
        phone = models.CharField(max_length=12)
        address = models.CharField(max_length=200)
        
        def __str__(self):
            return self.name
    
    class Invoice(models.Model):
        id = models.AutoField(primary_key=True)
        seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
        buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE)
        date = models.DateTimeField(auto_now_add=True)
    
    
        def total_amount(self):
            total = Decimal('0.00')
            for item in self.items.all():
                total = total + item.total()
            return total
    
        def invoice_number(self):
            if len(str(self.id))==1:
                return 'Invoice00'+self.id
            elif len(str(self.id))==2:
                return 'Invoice0'+self.id
            else:
                return 'Invoice'+self.id
    
        def __str__(self):
            return f'{self.seller} {self.buyer} {self.date}'
            
    
    class Item(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=20)
        invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE)
        price = models.DecimalField(decimal_places=2, max_digits=20)
        quantity = models.IntegerField(default=1)
        tax = models.DecimalField(decimal_places=2, max_digits=4)
    
        def total(self):
            total = Decimal(str((self.price-self.tax)*self.quantity))
            return total.quantize(Decimal('0.01'))
    
        def __str__(self):
            return f'{self.name} {self.quantity}'

Это serializers.py

    from django.db.models import fields
    from rest_framework import serializers
    from rest_framework.fields import ReadOnlyField
    from invoiceAPI.models import Seller, Buyer, Invoice, Item
    
    class SellerSerializer(serializers.ModelSerializer):
        id = serializers.IntegerField(read_only=True)
        class Meta:
            model = Seller
            fields = '__all__'
    
    class BuyerSerializer(serializers.ModelSerializer):
        id = serializers.IntegerField(read_only=True)
        class Meta:
            model = Buyer
            fields = '__all__'
    
    class ItemSerializer(serializers.ModelSerializer):
        id = serializers.IntegerField(read_only=True)
        class Meta:
            model = Item
            fields = '__all__'
    
    class InvoiceSerializer(serializers.ModelSerializer):
        seller = SellerSerializer(many=False)
        buyer = BuyerSerializer(many=False)
        item = ItemSerializer(many=True)
        class Meta:
            model = Invoice
            depth = 1
            fields = ('seller', 'buyer', 'item', 'date')
    
        def create(self, validated_data):
            seller_data = validated_data.pop('seller')
            buyer_data = validated_data.pop('buyer')
            items_data = validated_data.pop('items')
            print(seller_data, buyer_data, items_data)
            seller = Seller.objects.create(**seller_data)
            buyer = Buyer.objects.create(**buyer_data)
            invoice = Invoice.objects.create(seller = seller, buyer = buyer, **validated_data)
            items = []
            for item_data in items_data:
                Item.objects.create(invoice = invoice, **item_data)
            return invoice

<
    @api_view(['POST'])
    def create_invoice(request):
        print('inthe view')
        invoice = InvoiceSerializer(data = request.data)
        if invoice.is_valid():
            invoice.save()    
        return Response({request.data})
и это view.py

данные для теста являются

    {
        "seller": {
            "name": "Lalit Modi",
            "phone": "9998887776",
            "address": "New delhi"
        },
        "buyer": {
            "name": "Yogi",
            "phone": "9876543210",
            "address": "Aligarh, Uttar pradesh"
        },
        "items": [{
                "name": "Mobile",
                "price": "30000",
                "quantity": "10",
                "tax": "5"
            },
            {
                "name": "Laptop",
                "price": "60000",
                "quantity": "10",
                "tax": "8"
            },
            {
                "name": "Camera",
                "price": "90000",
                "quantity": "5",
                "tax": "18"
            }
        ]
    }
Вернуться на верх