python - 基于 2 个字段的 Django 过滤器

标签 python django django-orm

我有一个可以设置 expire_date_1 和 expire_date_2 的模型。还有 2 个这样的过滤器。

filter_1 = Q(expire_date_1__isnull=False) & Q(expire_date_1__lte=after_30days) 
filter_2 = Q(expire_date_2__isnull=False) & Q(expire_date_2__lte=after_30days)

我想过滤模型,如果 expire_date_2 不为空则使用 filter_2 否则使用 filter_1 我试过用 Case 和 When 来处理,但我不能在 When 函数中过滤,可以吗?

最佳答案

您可以使用 Coalesce [Django-doc]确定要使用的字段:

from django.db.models import <strong>Coalesce</strong>

MyModel.objects.alias(
    exp_date=<b>Coalesce('expire_date_2', 'expire_date_1')</b>
).filter(
    exp_date__lte=after_30_days
)

或在 之前使用 .annotate(...):

from django.db.models import <strong>Coalesce</strong>

MyModel.objects.<b>annotate(</b>
    exp_date=Coalesce('expire_date_2', 'expire_date_1')
<b>)</b>.filter(
    exp_date__lte=after_30_days
)

关于python - 基于 2 个字段的 Django 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69493711/

相关文章:

javascript - 将数据从 view.py 发送到 django 中的 JavaScript

Django 批量更新两个表的数据

python - Bokeh + 交互式小部件 + PythonAnywhere

python - 用 Python 编写的 Nautilus 扩展在调用 gtk.main() 时不会运行

python - 同一页面上相同 wtform 表单的多个独立实例

python - django datetimefield 时区

python - Django 过滤器。什么更有效 - .filter(date__range) 或 .all() 并通过 Python 进行过滤

django - Django按两个字段订购商品,但如果它们为零则忽略它们

python - 使用相关模型的自定义管理器的 Django 过滤器相关字段

python - 在 Windows 中使用 Protocol Buffer