我花了很多时间在谷歌上寻找解决方案,但我仍然无法解决我的问题。我有两个表,我感兴趣的是股票模型中与最新日期相关的stock_value。在注解之后如何设置这种关系?
Product表如下所示:
{
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发布于 2020-10-07 18:18:57
我没有为您提供完整的解决方案,但也许可以提供一些帮助。
我认为您应该先为Stock model添加一个相关的名称,如下所示。
class Stock(models.Model):
product_id = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='stock_prices')然后,要查询这一点,您可以这样做(我不确定如何集成到Django Rest框架中,但我想您会知道的)。
product = Product.objects.get(pk=some_pk)
product.stock_prices.order_by('-date')[0]也许你也可以看看DRF SerializerMethodField,我认为你应该能够将上面的查询集成到一个MethodField中。
https://stackoverflow.com/questions/64241681
复制相似问题