如何使用Django REST框架中的(总和)订购价格(总和)计算订单价格

问题描述 投票:0回答:1

我能够使用

@property
装饰器来计算订购型型号价格,但在创建订单对象时无法计算订单模型的总价格。

当我打电话给帖子API以创建订单时,没有错误,但是我没有在API响应中获得total_price。 我的型号:

class Order(models.Model): 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) #logic to calculate the total_price, and its not working @property def total_price(self): return sum([_.price for _ in self.order_items_set.all()]) #realted name is order_items def __str__(self): return self.user.email class Meta: verbose_name_plural = "Orders" ordering = ('-id',) 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) #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') #Logic to calculate the total_item_price, it works. @property def price(self): total_item_price = self.quantity * self.order_variants.price return total_item_price

我的序列化器:
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

class OrderSerializer(serializers.ModelSerializer):
    billing_details = BillingDetailsSerializer()
    order_items = OrderItemSerializer(many=True)
    user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
    # total_price = serializers.Field()
    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)
            
            return order
        else:
            raise serializers.ValidationError("This is not a customer account.Please login as customer.")

trone这个,
django django-rest-framework postman response
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.