[Python] property field is not shown in API call in Django rest framework

Discussão em 'Python' iniciado por Stack, Fevereiro 9, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to add a property field to my serializer while creating Order objects creating the OrderItem objects at the same time. But it is not shown in the result while calling the post API.

    There is no price filed in the result as shown here:

    [​IMG]

    My models:

    class OrderItem(models.Model):
    #user = models.ForeignKey(User,on_delete=models.CASCADE, blank=True
    #orderItem_ID = models.UUIDField(max_length=12, editable=False,default=str(uuid.uuid4()))
    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)



    #total_item_price = models.PositiveIntegerField(blank=True,null=True,default=0)

    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):
    return self.quantity * self.item.varaints.price
    # return total_item_price


    My serializers:

    class OrderItemSerializer(serializers.ModelSerializer):
    order = serializers.PrimaryKeyRelatedField(read_only=True)
    price = serializers.ReadOnlyField()
    class Meta:
    model = OrderItem
    fields = ['id','order','orderItem_ID','item','order_variants', 'quantity','order_item_status','price']
    # depth = 1


    Here I have put price in the serializer field, there is no error, but it doesn't show the price in the API in Postman.

    class OrderSerializer(serializers.ModelSerializer):

    billing_details = BillingDetailsSerializer()
    order_items = OrderItemSerializer(many=True)
    user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
    class Meta:
    model = Order
    fields = ['id','user','ordered_date','order_status', 'ordered', 'order_items', 'total_price','billing_details']
    # depth = 1



    def create(self, validated_data):
    user = self.context['request'].user
    if not user.is_seller:
    order_items = validated_data.pop('order_items')
    billing_details = validated_data.pop('billing_details')
    order = Order.objects.create(user=user,**validated_data)
    BillingDetails.objects.create(user=user,order=order,**billing_details)
    for order_items in order_items:
    OrderItem.objects.create(order=order,**order_items)


    else:
    raise serializers.ValidationError("This is not a customer account.Please login as customer.")

    Continue reading...

Compartilhe esta Página