Django: не удается получить текущего пользователя, вошедшего в систему в DRF RetrieveUpdateDestroyAPIView - PullRequest
0 голосов
/ 28 мая 2020

Я хочу вернуть отчеты, написанные автором, вошедшим в систему. Я определил пользовательскую модель пользователя через AbstractBaseUser. Я хочу использовать RetrieveUpdateDestroyAPIView, чтобы автор мог получать, а также редактировать и удалять отчеты.

Я определил эти модели: CustomUser, используется как модель пользователя по умолчанию и для аутентификации. ReporterProfile, пользователи должны заполнять эту модель, когда они продвигают себя как авторы. . Модель Report хранит все отправленные отчеты. Поле reporterprofile в модели Report имеет отношение ForeignKey с моделью ReporterProfile, которая, в свою очередь, имеет отношение ForeignKey с моделью CustomUser.

Мои определения модели:

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now)
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []


class ReporterProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    dob = models.DateField(auto_now=False, blank=True, help_text="YYYY-MM-DD")
    sex = models.CharField(max_length=22, choices=SEX_CHOICES)
    avatar = models.ImageField(upload_to=user_directory_path)

Это мое мнение:

class MyReportsView(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = ReportSerializer(request.user)
    queryset = Report.objects.all()  # need to get the currently logged in user

При этом я получаю сообщение об ошибке: NameError: name 'request' is not defined.

Это мой сериализатор:

class ReportSerializer(serializers.ModelSerializer):
    class Meta:
        model = Report
        fields = ('reporterprofile', 'slug', 'title', 'column', 'summary', 'body', 'created', 'modified', 'published',)

Как получить отчеты, отправленные текущим авторизованным пользователем?

1 Ответ

1 голос
/ 28 мая 2020

Заменить метод get_queryset()

class MyReportsView(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    <b>serializer_class = ReportSerializer

    def get_queryset(self):
        return Report.objects.filter(reporterprofile__user=self.request.user)</b>

Вы можете получить доступ к текущему авторизованному пользователю , позвонив self.request.user в любом месте класса представления.

Примечание: выражение filter(user=self.request.user), вероятно, содержит некоторую ошибку поля, так как нет прямой связи с Модель пользователя с аутентификацией дюйм Report

...