Как выполнить 'SELECT a or b < c FROM Table' на Django QuerySet?

У меня следующая модель:

class DiscountCoupon(models.Model):
   is_used = models.BooleanField(default=False)
   expiration_date = models.DateField()

   def is_available(self):
      if self.used or self.expiration_date <= date.today():
         return False
      return True

Вместо того, чтобы вызывать метод is_available итерацией по QuerySet, я хочу выполнить эту операцию в QuerySet для лучшей производительности, например, так:

SELECT (used OR (expiration_date < Now())) AS is_available FROM randomapp_discountcoupon;

Возможно ли это?

Вы можете использовать Q объекты как

from django.db.models import Q

discount_objects = DiscountCoupon.objects.filter(Q(is_used=True) | Q(expiration_date__lt=datetime.date.today())
Вернуться на верх