André
André

Reputation: 25554

Django Rest Framework - How to get request.user on views.py?

I'm using the Django rest framework. I need to get the user on views.py but I not able to.

from app.models import SmsToSend
from app.serializers import SmsToSendSerializer
from rest_framework import generics
from app.permissions import IsOwner
from rest_framework import permissions


class SmsToSendList(generics.ListCreateAPIView):
    queryset = SmsToSend.objects.all()
    serializer_class = SmsToSendSerializer
    permission_classes = (IsOwner, permissions.IsAuthenticated)

    def pre_save(self, obj):
        obj.owner = self.request.user

How can I call request.user here?

Best Regards,

Upvotes: 1

Views: 3886

Answers (3)

Hvitis
Hvitis

Reputation: 555

def get_queryset(self, *args, **kwargs):
    user_id = self.request.user.id

Upvotes: 0

André
André

Reputation: 25554

class SmsToSendList(generics.ListCreateAPIView):
    #queryset = SmsToSend.objects.all()
    serializer_class = SmsToSendSerializer
    permission_classes = (IsOwner, permissions.IsAuthenticated)

    def get_queryset(self):
        user = self.request.user
        return SmsToSend.objects.filter(owner=user)  

    def pre_save(self, obj):
        obj.owner = self.request.user

Instead of the queryset I had to use get_queryset method

Upvotes: 1

Zack Argyle
Zack Argyle

Reputation: 8407

You are very close. I think a lot of people spend time trying to figure this out. Define request as a parameter in your view method and you will have access to it like this.

def pre_save(self, request, obj):
    obj.owner = request.user

You can get your queries like this.

request.REQUEST.get('<query>')

In a serializer method it is slightly different, you can get data like this.

request = self.context['request']
user = request.user
query = request.GET['<query>']

Hope this is helpful!

Upvotes: 1

Related Questions