我有一个带有几个注释的查询集,包括两个字段:priceprice_after_discount.我想实现一个基于特定值的max_Filter.但是,我需要处理一个条件:如果price_after_discount字段不等于0,则应该对该字段应用过滤器;否则,应该对price字段应用过滤器.

我try 了以下代码,尽管它不能正常运行.这是一个示例代码:

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

您能提供关于如何基于price_after_discountprice字段正确实现max_Filter条件的指导吗?

推荐答案

您使用.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)

Django相关问答推荐

Django为不同应用程序发出信号

ModuleNotFoundError:没有名为guardian.shortcuts的模块

获取 Django (postgres) 中带注释字段的平均值

无法迁移,模型中的外键导致了问题

Pytest-django - 测试创建和传递所需的用户对象

django 创建多种类型用户的最佳方法

在 GoDaddy 上安装 django 站点

如何解决 AssertionError: .accepted_renderer not set on Response in django and ajax

Django:想要将一个空字段显示为空白而不是显示无

Django ORM,按天分组

Django 自定义管理器 - 如何仅返回登录用户创建的对象?

Django:在模型管理器中获取模型的表名?

Django 1.9 中 django.db.models.loading.get_model() 的类似功能是什么?

如何使用 select_for_update 在 Django 中获取查询?

Django 模板和变量属性

模型表格Save保存,Get获取保存的对象

具有 2 种语言的 Django 站点

Django模板过滤器(filters)、标签(tags)、simple_tags和inclusion_tags

如何将类、id、占位符属性添加到 django 模型表单中的字段

Django - 保存新对象时如何获取 self.id?