DRF-запрос не определен для получения текущего идентификатора пользователя - PullRequest
0 голосов
/ 04 февраля 2019

Итак, я пытался сделать так, чтобы мой просмотр API возвращал только объекты, которые имеют свои атрибуты post_user, с текущим идентификатором вошедшего в систему пользователя.Эти post_user атрибуты заполняются так же, как и всякий раз, когда я публикую его, я заполняю переменную идентификатором текущего пользователя через мой сериализатор.

Однако я не добился успеха, так как он говорит, что запрос не определен.Я просто хочу получить идентификатор текущего пользователя, чтобы я мог использовать его для фильтрации своего объекта:

views.py

# To retrieve and list all posts with DRF
class ListPosts(generics.ListCreateAPIView):
    queryset = Posts.objects.get(post_user=request.user.id)
    serializer_class = PostsSerializer
    permission_classes = (permissions.IsAuthenticated,)

serializers.py

# serializer for posts to be taken
class PostsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Posts
        fields = ('id','post_title','post_content',)

    def create(self, validated_data):
        posts = Posts.objects.create(
            post_title=validated_data['post_title'],
            post_content=validated_data['post_content'],
            # gets the id of the current user
            post_user=self.context['request'].user.id, 
        )

        posts.save()
        return posts

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

ошибка в строке

queryset = Posts.objects.get(post_user=request.user.id)

здесь запрос не определен во время объявления класса.Решение в том, что вы можете переопределить метод get_queryset.

class ListPosts(generics.ListCreateAPIView):
   queryset = Posts.objects.all()
   serializer_class = PostsSerializer
   permission_classes = (permissions.IsAuthenticated,)

   def get_queryset(self, *args, **kwargs):
      return Posts.objects.filter(post_user=self.request.user)
0 голосов
/ 04 февраля 2019

Наследуйте CreateModelMixin функции внутри PostsSerializer и попробуйте определить свой create () метод, такой как def create(request, *args, **kwargs).

Наконец, вы можете попытаться получить идентификатор пользователя, используя request.user.id.

. Для лучшей документации вы можете проверить https://www.django -rest-framework.org / api-guide/generic-views/.

Также проверьте, что такое Mixins и почему мы его используем (если вы не знаете).

Для небольшого и краткого определения, Миксины - это просто класс с методами, которые в основном могут наследоваться и использоваться нашими представлениями .

Если у вас есть какие-либо сомнения, пожалуйста, прокомментируйте.

...