Tengo un modelo donde puedo configurar expire_date_1 y expire_date_2. Y 2 filtros como este.
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)Quiero filtrar el modelo que si expire_date_2 no es nulo, entonces use filter_2; de lo contrario, use filter_1 Intenté hacerlo con Case y When pero no puedo filtrar en una función When, ¿puedo?
Puede trabajar con Coalesce [Django-doc] para determinar qué campo usar:
from django.db.models import Coalesce MyModel.objects.alias( exp_date= Coalesce('expire_date_2', 'expire_date_1') ).filter( exp_date__lte=after_30_days ) o anterior a django-3.2 con .annotate(…) :
from django.db.models import Coalesce MyModel.objects. annotate( exp_date=Coalesce('expire_date_2', 'expire_date_1') ) .filter( exp_date__lte=after_30_days )