Raise TypeError( TypeError: Прямое присвоение прямой стороне множества "многие ко многим" запрещено. Вместо этого используйте order_item.set()

Когда я пытаюсь сделать сериализатор для своей модели для сохранения элементов заказа, я получаю эту ошибку

  1. This is my serializer
    class OrdersItemsSerializer(serializers.ModelSerializer):
            class Meta:
                model = OrderItems
                fields = ["customer","product","quantity"]
        
        class OrdersSerializer(serializers.ModelSerializer):
            order_item = OrdersItemsSerializer(many = True)
            class Meta:
                model = Orders
                fields = ["id","order_at","customer","total_price","diliver_at","order_item"]
            def save(self):
                order_item = self.validated_data.pop('order_item') 
                orderitemsls=set()
                for f in order_item:
                    orderitems=OrderItems(
                        customer=f['customer'],
                        product=f['product'],
                        quantity=f['quantity'],
                        )    
                    orderitems.save()
                    print(orderitems.id)
                    orderitemsls.add(orderitems)
                print(orderitemsls)        
        
                new_order=Orders(
                        customer=self.validated_data['customer'],
                        total_price=self.validated_data['total_price'],
                        order_item=orderitemsls
                        )
        
                return orderitemsls
  1. This is my models
    from django.db import models
    from django.contrib.auth import get_user_model
    
    # Create your models here.
    User = get_user_model()
    class Customers(models.Model):
        customer = models.OneToOneField(User, on_delete=models.CASCADE)
        profile_picture = models.ImageField()
        phone=models.CharField(max_length=12)
        address=models.CharField(max_length=500)
        reg_at = models.DateTimeField(auto_now_add=True)
        class Meta:
            verbose_name_plural = "Customers"
            unique_together = ('customer', 'id')
    
        def __str__(self):
            return self.customer.username
    
    class Categories(models.Model):
        name = models.CharField(max_length=100)
        image = models.ImageField()
        reg_at = models.DateTimeField(auto_now_add=True)
        class Meta:
            verbose_name_plural = "Categories"
        def __str__(self):
            return self.name
    
    class Vendors(models.Model):
        vendor = models.OneToOneField(User, on_delete=models.CASCADE)
        profile_picture = models.ImageField()
        phone=models.CharField(max_length=12)
        address=models.CharField(max_length=500)
        reg_at = models.DateTimeField(auto_now_add=True)
        class Meta:
            verbose_name_plural = "Vendors"
        def __str__(self):
            return self.vendor.username
    
    class Products(models.Model):
        name = models.CharField(max_length=100)
        image = models.ImageField()
        price=models.IntegerField()
        vendor = models.ForeignKey(Vendors, on_delete=models.CASCADE)
        reg_at = models.DateTimeField(auto_now_add=True)
        category = models.ForeignKey(Categories, on_delete=models.CASCADE)
        class Meta:
            verbose_name_plural = "Products"
        def __str__(self):
            return self.name
    class OrderItems(models.Model) :
        customer = models.ForeignKey(Customers, on_delete=models.CASCADE)
        ordered = models.BooleanField(default=False)
        product = models.ForeignKey(Products, on_delete=models.CASCADE)
        quantity = models.IntegerField(default=1)
    
        class Meta:
            verbose_name_plural = "OrderItems"
        def __str__(self):
            return f"{self.quantity} of {self.product.name}"
    
    class Orders(models.Model):
        order_item = models.ManyToManyField(OrderItems)
        order_at = models.DateTimeField(auto_now_add=True)
        customer = models.ForeignKey(Customers, on_delete=models.CASCADE)
        total_price=models.CharField(max_length=100,blank=True)  
        diliver_at = models.DateTimeField(blank=True)
        ordered = models.BooleanField(default=False)
        class Meta:
            verbose_name_plural = "Orders"  
    
        def __str__(self):
            return str(self.id)        
  1. This is my views
class api_order(APIView):
    def post(self, request,id=None, format=None):
        serializer=OrdersSerializer(data=request.data)
        data={}
        if serializer.is_valid():
            serializer.save()
            data["success"]="Order Added"
            # return Response(data=data)
        else:
            data=serializer.errors
        return Response(data)
  1. data that { "customer": 3, "total_price": "2557", "diliver_at": "2021-12-14T14:49:50.492950Z", "order_item": [ { "customer": 3, "product": 2, "quantity": 3 }, { "customer": 3, "product": 3, "quantity": 2 } ] }
Вернуться на верх