我有这个序列化器类。我需要将数量的值设为 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
但是这个实现并没有保存到数据库,尽管它序列化了