optimize User.is_subscribed and User.was_subscribed

This commit is contained in:
imperosol 2024-11-20 17:25:39 +01:00
parent 7ca1afe529
commit e3fe5bd4f3

View File

@ -387,14 +387,21 @@ class User(AbstractUser):
@cached_property @cached_property
def was_subscribed(self) -> bool: def was_subscribed(self) -> bool:
if "is_subscribed" in self.__dict__ and self.is_subscribed:
# if the user is currently subscribed, he is an old subscriber too
# if the property has already been cached, avoid another request
return True
return self.subscriptions.exists() return self.subscriptions.exists()
@cached_property @cached_property
def is_subscribed(self) -> bool: def is_subscribed(self) -> bool:
s = self.subscriptions.filter( if "was_subscribed" in self.__dict__ and not self.was_subscribed:
# if the user never subscribed, he cannot be a subscriber now.
# if the property has already been cached, avoid another request
return False
return self.subscriptions.filter(
subscription_start__lte=timezone.now(), subscription_end__gte=timezone.now() subscription_start__lte=timezone.now(), subscription_end__gte=timezone.now()
) ).exists()
return s.exists()
@cached_property @cached_property
def account_balance(self): def account_balance(self):