gpt4 book ai didi

python - 如何在 Django 中进行条件查询?

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:36 25 4
gpt4 key购买 nike

我正在尝试按计算字段进行过滤,其中计算取决于其他字段的值。

我正在尝试按 sales_price(计算字段)进行过滤,其中 sales_price 的定义如下面的伪代码

if discount is NULL                                                             
sales_price = price
else
sales_price = price - price*discount/100

最终目标是按范围过滤 sales_price:

filter(sales_price__range=(price_min, price_max))                                   

这是我的模型:

class Product(models.Model):                                                
price = models.IntegerField()
discount = models.IntegerField(blank=True, null=True)

最佳答案

我会为您指出正确的方向:

在包含WhenCase 的条件表达式中使用F 表达式

您想要根据依赖于其他值的值进行排序,所以让我们使用 F Expression (因为 sales_price 取决于其他字段)在 conditional expression 中(因为最终的表达式取决于discount是否为NULL)

首先,我们构建一个依赖于discountpricesales_price 值,并用它注释我们的查询:

from django.db.models import When, Case, F, IntegerField

Product.objects.annotate(
sales_price=Case(
When(discount__isnull=True, then=F('price')),
When(discount__isnull=False, then=(F('price') - (F('discount') * F('price')) / 100)),
output_field=IntegerField(),
)
)

现在,您已经包含了一个可以过滤的 sales_price:

   Product.objects.annotate(...).filter(sales_price__range=(price_min, price_max)

关于python - 如何在 Django 中进行条件查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com