如何使一个序列化器字段的值依赖于同一序列化器类中另一个序列化器字段的值

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

我有这个序列化器类。我需要将数量的值设为 menuitem.quanity,将价格设为数量乘以 menuitem.price。可以看出,menuitem 是一个外国领域

    menuitem = MenuItemSerializer(read_only=True)
    menuitem_id = serializers.IntegerField(write_only=True)
    quantity = serializers.IntegerField()
    unit_price = serializers.DecimalField(max_digits=6, decimal_places=2)
    price = serializers.DecimalField(max_digits=6, decimal_places=2)
    
    class Meta:
        model = Cart
        fields = ['user', 'menuitem', 'menuitem_id', 'quantity', 'unit_price', 'price']
        depth = 1

    def get_unit_price(self, obj):
        return obj.menuitem.price

    def get_total_price(self, obj):
        return obj.unit_price * obj.quantity

使用我从模型类返回@property 的类中定义的方法

class Cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    menuitem = models.ForeignKey(MenuItem, on_delete=models.CASCADE)
    quantity = models.SmallIntegerField(default=0)
    unit_price = models.DecimalField(max_digits=6, decimal_places=2)
    price = models.DecimalField(max_digits=6, decimal_places=2)

    class Meta:
        unique_together = ('menuitem', 'user')

    def __str__(self):
        return f'{self.user}, {self.menuitem}, {self.quantity}, {self.price}'
    
    @property
    def total(self):
        return self.quantity * self.menuitem.price
    
    @property
    def _unit_price(self):
        return self.menuitem.price

但是这个实现并没有保存到数据库,尽管它序列化了

python django django-rest-framework django-serializer
© www.soinside.com 2019 - 2024. All rights reserved.