基于查询集的Django过滤器动态字段名

dgtucam1  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(92)

我有一个带有很多注解的查询集,我有两个字段:priceprice_after_discount
现在我想写一个基于value的max_filter。但是我需要这样做,如果price_after_discount不为0,那么就对它进行过滤,如果它为0,那么就根据price进行过滤。
我知道这段代码不起作用,只是你可以更好地理解这个问题:

value = 200
queryset.filter(
                Case(
                    When(
                        price_after_static_discount=0,
                        then=F("price")
                    ),
                    default=F("price_after_discount")
                )__lt=value
        )
rsaldnfx

rsaldnfx1#

使用**.alias(…)[Django-doc]作为表达式,然后在别名上使用.filter(…)**[Django-doc]:

queryset.alias(
    my_price=Case(
        When(price_after_static_discount=0, then=F('price')),
        default=F('price_after_discount'),
    )
).filter(my_price__lt=value)

相关问题