django-rest-framework注释关系

问题描述

我已经在Google上花费了很多时间来寻找解决方案,但我仍然遇到问题。我有两个表,我对股票模型中与最新日期相关的stock_value感兴趣。注释后如何设置这种关系?

产品表如下:

    {
    product_id: 1,'description': 
    'macbook pro','brand': 
    'Apple','supplier': 'Apple'
    }

库存表如下:

    {product_id: 1,'date': '04-07-2020','stock-value': 38}
    {product_id: 1,'date': '05-07-2020','stock-value': 34}
    {product_id: 1,'date': '06-07-2020','stock-value': 32}
    {product_id: 1,'date': '07-07-2020','stock-value': 24}

这是我要寻找的结果:

    {product_id: 1,... other_fields,stock_value: 24}

我的代码如下:

class Product(models.Model):
    supplier_id = models.ForeignKey(supplier,on_delete=models.CASCADE)
    description = models.CharField(max_length=200)
    brand = models.CharField(max_length=200)


class Stock(models.Model):
    product_id = models.ForeignKey(Product,on_delete=models.CASCADE)
    date = models.DateField(default=timezone.Now)
    stock_value = models.BigIntegerField()


class ProductSerializer(serializers.ModelSerializer):
    supplier = serializers.ReadOnlyField(source='supplier_id.supplier')
    date = serializers.DateField()
    stock = serializers.IntegerField()

    class Meta:    
       model = Product
       fields = ('description','brand','supplier' 'date','stock')


class ProductList(generics.ListCreateAPIView):

    def get_queryset(self):
        query = Product.objects.annotate(date=Max('stock__date'))

        return query

解决方法

我没有为您提供完整的解决方案,但也许会有帮助。

我认为您应该像这样首先在股票模型中添加一个相关名称。

class Stock(models.Model):
    product_id = models.ForeignKey(Product,on_delete=models.CASCADE,related_name='stock_prices')

然后可以对此进行查询(我不确定如何集成到Django Rest Framework中,但是我想您会知道的。)

product = Product.objects.get(pk=some_pk)
product.stock_prices.order_by('-date')[0]

也许也可以看看DRF SerializerMethodField,我想您应该可以将上面的查询集成到MethodField中。