We know in Django, we can access to too many instances in self.request
like self.request.user
, self.request.data
, self.request.authenticator
etc
I am trying to get self.request.mygroup
writing custom middleware
this is my models
from django.contrib.auth.models import User
from django.db import models
class Person(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid4,
editable=False
)
auth_user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name='auth_user',
)
class Group(models.Model):
members = models.ManyToManyField(
Person,
related_name='group_members'
)
I wrote this middleware and it is working fine:
class GroupMiddleWare(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
person = Person.objects.filter(
auth_user__id=request.user.id
).first()
mygroup = Group.objects.filter(
members__alias__in=[person.alias]
)
request.mygroup = mygroup.first()
response = self.get_response(request)
return response
Above middleware working fine but the problem is when I visit from incognito mode, I mean when I am not logged in, it throws me an error like AnonymouseUser doesn't have attribute self.request.user
to handle this, I tried writing condition like if self.request.user.is_authenticated:
but it occurs another error as same. I guess I crafted the middleware wrongly, Can anyone help me to extend self.request
to get my own instance like self.request.mygroup
?
I am not getting what is the right way to write a middleware, i am very new in middleware
I want self.request.mygroup
should retun only authinticated user's group