问题描述
我已经在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中。