Django API: получить аутентифицированного пользователя из запроса - PullRequest
0 голосов
/ 07 ноября 2018

Пользователь аутентифицирован с помощью Аллаута. Я хочу создать профиль и установить аутентифицированного пользователя в качестве владельца профиля. Как я могу получить пользователя?

Класс модели:

from django.db import models
from allauth.utils import get_user_model
from courses.models import Course

class Profile(models.Model):
    owner = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    courses = models.ManyToManyField(Course, blank=True)

    def get_courses_items(self):
        return self.courses.all()

    def __str__(self):
        return self.owner.username

Просмотров:

from rest_framework.generics import CreateAPIView

from profiles.models import Profile
from .serializers import ProfileSerializer

class ProfileCreateView(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

установите вашу пользовательскую модель в файле настроек (base.py) и импортируйте ее

AUTH_USER_MODEL = 'users.User' #(format is module.user model name)


from django.conf import settings


user = models. OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

метод 2

Переопределить метод get_create в ProfileView. Каждый аутентифицированный запрос содержит объект request.user, который представляет пользователя, выполняющего запрос. Чтобы получить идентификатор пользователя с этим, вы просто запускаете request.user.id

class ProfileCreateView(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer



    def create(self, request, *args, **kwargs):
        user = User.objects.get(id=request.user.id)
        # create the profile and save it
        ...

в ваших сериализаторах вы также можете получить текущего пользователя таким образом

from rest_framework.serializers import CurrentUserDefault, PrimaryKeyRelatedField

class ProfileModelSerializer(ModelSerializer):
    user = PrimaryKeyRelatedField(read_only=True, default=CurrentUserDefault())
    class Meta:
    ...

Я не знаю, какова оставшаяся часть вашей установки, но какая-либо из этих комбинаций или их комбинация

0 голосов
/ 07 ноября 2018

Вы можете получить пользователя из запроса с помощью request.user. Тогда, вероятно, вам следует переопределить def create метод CreateAPIView, чтобы использовать этого пользователя и создать объект.

...