Django Rest框架每个实例的最新子级

2024-09-30 04:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Django Rest框架,我正在构建一个web应用程序,它可以保存有关产品及其价格的信息。随着时间的推移,一个产品可以有多种价格。我的模型是这样的:

class Product(models.Model):
    name = models.CharField(max_length=100)

class Price(models.Model):
    product = models.ForeignKey(Product, related_name='prices', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=6, decimal_places=2, default=0)
    date = models.DateField(default=datetime.date.today)

我设置了以下序列化程序:

class PriceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Price
        fields = ('price', 'date')

class ProductSerializer(serializers.ModelSerializer):
    prices = PriceSerializer(many=True, read_only=True)

    class Meta:
        model = Product
        fields = ('name', 'prices')

现在,我想创建一个APIView来显示所有产品的最新价格。像这样:

[
    {
        "name": "Product A",
        "price_latest": 1.00
    },
    {
        "name": "Product B",
        "price_latest": 2.00
    }
]

有人知道如何做到这一点吗


Tags: namedefaultdatemodel产品models价格product
1条回答
网友
1楼 · 发布于 2024-09-30 04:40:16

您可以使用DRF中的^{}执行以下操作:

class ProductSerializer(serializers.ModelSerializer):
    latest_price = serializers.SerializerMethodField()

    def get_latest_price(self, instance):
        price_obj = instances.prices.order_by('-date').first()
        if price_obj:
            return price_obj.price
        return None

    class Meta:
        model = Product
        fields = ('name', 'latest_price')

相关问题 更多 >

    热门问题