Rashaad
Rashaad

Reputation: 73

How to access a logged in user from a class based view?

How do I access a current logged in user from a class-based view? In a function-based view we can pass a request parameter but I can't pass a request parameter from a class view. I have seen ways to do it in the internet but I can't understand it.

my models.py file

class Category(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return (self.name)

    def get_absolute_url(self):
        return reverse("home")


class Post(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField(max_length=3500)
    category = models.CharField(max_length=255, default="uncategorized")

views.py

class HomeView(ListView, LoginRequiredMixin):
    model = Post
    template_name = "home.html"

Thank you.

Upvotes: 0

Views: 675

Answers (1)

Pedram
Pedram

Reputation: 3920

You can use self.request.user inside methods of class-based views; as an example:

class HomeView(ListView, LoginRequiredMixin):
    model = Post
    template_name = "home.html"

    def get_context_data(self):
        current_loggedin_user = self.request.user
        # ...

Edit (just print the username):

class HomeView(ListView, LoginRequiredMixin):
    model = Post
    template_name = "home.html"

    def __init__(self, *args, **kwargs):
        print(self.request.user, self.request.user.username) # print user & username
        return super().__init__(*args, **kwargs)

Upvotes: 1

Related Questions