基于 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
)

或在 之前 .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
)