基于 2 个字段的 Django 过滤器
Django Filter based on 2 fields
我有一个可以设置 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
)
或在 django-3.2 之前 .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
)
我有一个可以设置 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
)
或在 django-3.2 之前 .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
)