Django过滤模型一对多关系,价格之间的最大差异

pkd*_*dkk 6 python django django-models django-queryset

我有一个产品型号,带有一些价格的外键,我真的想列出具有"最佳"报价的产品......怎么做?

class Product(models.Model):
    productname = models.CharField(max_length=1024)

class Price(models.Model):
    product = models.ForeignKey(Product)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

首先,我希望所有产品都有一个以上的价格,我得到了:

ps = Product.objects.annotate(c=Count("price")).filter(c__gt=2)
Run Code Online (Sandbox Code Playgroud)

现在我想要最好的6种产品,两种最新价格之间的差异最大.

任何人都可以帮忙吗?我希望它有意义;)

jul*_*sar 6

您可以使用StdDev(标准偏差)聚合器,因此您的查询集可能如下所示:

ps = Product.objects.filter(price__gt=1).annotate(dev=StdDev("price__price"), min_price=Min("price__price")).order_by('-dev')[:6]
Run Code Online (Sandbox Code Playgroud)

最好的报价是 ps[0].min_price

希望这可以帮助