diff --git a/website/members/middleware.py b/website/members/middleware.py index b0bdf0dd01b57d431b2cbb693d9a0b93cf20452d..b4c2a999ed4e0a51f114a9ba8a67fee8a72cf2b5 100644 --- a/website/members/middleware.py +++ b/website/members/middleware.py @@ -1,14 +1,23 @@ +from django.utils.functional import SimpleLazyObject + from members.models import Member +def get_member(request): + try: + return Member.objects.get(pk=request.user.pk) + except Member.DoesNotExist: + return None + + class MemberMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): - try: - request.member = Member.objects.get(pk=request.user.pk) - except Member.DoesNotExist: - request.member = None + # This needs to be a lazy object as Django REST Frameworks calls the + # the middleware before setting request.user + # This also avoids unnecessary queries when request.member is not used + request.member = SimpleLazyObject(lambda: get_member(request)) return self.get_response(request)