django-rest框架注释关系



我花了很多时间在谷歌上寻找解决方案,但我仍然遇到了问题。我有两张表,我对股票模型中与日期相关的最新股票值感兴趣。注释后如何设置此关系?

产品表看起来像:

{
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中。

最新更新