Django,从注释的最大值中选择一个最大值(从几个字段中选择最大值)

Django,从注释的最大值中选择一个最大值(从几个字段中选择最大值),django,Django,我对django注释方法有一个问题: 是否可以计算这3个特定折扣中的“最大折扣”(并按此“最大折扣”排序) 试着这样做: max_discount = max(value for key, value in Product.objects\ .annotate( # maybe 'aggregate'? product_discount=Max('discounts__amount'), category_discount=Max('category__d

我对django注释方法有一个问题: 是否可以计算这3个特定折扣中的“最大折扣”(并按此“最大折扣”排序)


试着这样做:

max_discount = max(value for key, value in Product.objects\
   .annotate(  # maybe 'aggregate'?
        product_discount=Max('discounts__amount'),
        category_discount=Max('category__discounts__amount'),
        brand_discount=Max('brand__discounts__amount')
    )
)
根据你的计划,你可以做下一件事:

from django.db.models.functions import Greatest
Product.objects.annotate(max_discount=Greatest('discounts__amount', 'brand__discounts__amount', 'category__discounts__amount'))

但请注意,这出现在Django 1.9中。

这里的每个折扣都是一般性的关系,因此我必须为产品、类别、品牌选择折扣,然后从这些折扣中选择最大折扣,并按它们排序(甚至更多-将计算出的折扣应用于价格)。示例:产品6::5.00::20.00::25.00-->25.00,因此我需要在queryset中执行。我担心这远远落后于Django的queryset可能性。也许你应该试试原始查询。
from django.db.models.functions import Greatest
Product.objects.annotate(max_discount=Greatest('discounts__amount', 'brand__discounts__amount', 'category__discounts__amount'))