I tried to create an update api for Orders but in the result of the postman, I am getting this error
KeyError at /api/updateorder/260 'id'
I have put the id field both in OrderUpdate Serializer and OrderItemUpdateSerializer as you can see below. Also, I have printed the validated_data.pop('order_items'). In the result of print, I get Orderdict which has no id field. I don't know why id is not showing.
My models:
class Order(models.Model):
    ORDER_STATUS = (
        ('To_Ship', 'To Ship',),
        ('Shipped', 'Shipped',),
        ('Delivered', 'Delivered',),
        ('Cancelled', 'Cancelled',),
    )
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)    
    order_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship')
    ordered_date = models.DateTimeField(auto_now_add=True)
    ordered = models.BooleanField(default=False) 
    @property
    def total_price(self):
       
        return sum([_.price for _ in self.order_items.all()])
   
class OrderItem(models.Model):    
    orderItem_ID = models.CharField(max_length=12, editable=False, default=id_generator)
    order = models.ForeignKey(Order,on_delete=models.CASCADE, blank=True,null=True,related_name='order_items')
    item = models.ForeignKey(Product, on_delete=models.CASCADE,blank=True, null=True)
    order_variants = models.ForeignKey(Variants, on_delete=models.CASCADE,blank=True,null=True)
    quantity = models.IntegerField(default=1)    
    ORDER_STATUS = (
        ('To_Ship', 'To Ship',),
        ('Shipped', 'Shipped',),
        ('Delivered', 'Delivered',),
        ('Cancelled', 'Cancelled',),
    )
    order_item_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship')
     @property
     def price(self):
        total_item_price = self.quantity * self.order_variants.price
        return total_item_price
My serializers:
class OrderItemUpdateSerializer(serializers.ModelSerializer):    
    id = serializers.PrimaryKeyRelatedField(read_only=True)    
    class Meta:
        model = OrderItem
        fields = ['id','order','item','order_variants', 'quantity','order_item_status','price']
        # depth = 1
class OrderUpdateSerializer(serializers.ModelSerializer):
    order_items = OrderItemUpdateSerializer(many=True)
    billing_details = BillingDetailsSerializer()
    class Meta:
        model = Order
        fields = ['id','ordered','order_status','order_items','total_price','billing_details']
    def update(self, instance, validated_data):
        instance.order_status = validated_data.get('order_status')
        instance.ordered = validated_data.get('ordered')
        #billing_details_logic
        billing_details_data = validated_data.pop('billing_details',None)
        if billing_details_data is not None:
            instance.billing_details.address = billing_details_data['address']
            instance.billing_details.save()
        #order_items_logic
        instance.save()
        #instance.order_items.clear()
        order_items_data = validated_data.pop('order_items')
        print(order_items_data)
       
        for order_item_data in order_items_data:
            oi, created = OrderItem.objects.update_or_create(
                id = order_item_data['id'],
                defaults={        
                    'quantity' : order_item_data['quantity'],
                    'order_item_status': order_item_data['order_item_status']        #
                }
            )
            
        instance.save()
        return super().update(instance,validated_data)
My orderdict after print command.
[OrderedDict([('order', <Order: mylo@gmail.com>), ('item', <Product: AaaAAAAUpdatedpicturetest>), ('order_variants', <Variants: AgainTest>), ('quantity', 3), ('order_item_status', 'To_Ship'
)]), OrderedDict([('order', <Order: mylo@gmail.com>), ('item', <Product: Kiara Terrell>), ('order_variants', <Variants: OAXWadRTZ_12C>), ('quantity', 3), ('order_item_status', 'To_Ship')])]
As we can see, there is no id in the print result. What is the issue? Also, I am not sure if I can use the for loop in the above way for iterating over multiple OrderDict for updating the values.