Как выполнить '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())