Как отфильтровать набор запросов объектов Tag по текущему пользователю

Мне нужно фильтровать теги по текущему пользователю, в классе сериализаторов я не могу сделать request -queryset=TagPrivate.objects.filter(user=self.request.user)

serializers.py

    class DotPrivateSerializer(serializers.ModelSerializer):

        tag = serializers.PrimaryKeyRelatedField(
            many=False,
            queryset=TagPrivate.objects.all() # <-------------------------- filter by user
        )
    
        class Meta:
            model = DotPrivate
            fields = ('id', 'name', 'description', 'lat', 'lon', 'rating', 'link', 'tag')
            read_only_fields = ('id',)

...так есть ли способ сделать это в views.py?

class DotPrivateViewSet(viewsets.ModelViewSet):

    serializer_class = serializers.DotPrivateSerializer
    queryset = DotPrivate.objects.all()
    authentication_classes = (JWTAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        """"Return objects for the current authenticated user only"""

        return queryset.filter(user=self.request.user)

Вы можете получить текущее использование в DRF, используя этот класс здесь . В вашем случае, если вы хотите фильтровать из сериализатора, вы можете сделать следующее

 class DotPrivateSerializer(serializers.ModelSerializer):
    user_private_tags = TagPrivate.objects.filter(user=serializers.CurrentUserDefault()
    tag = serializers.PrimaryKeyRelatedField(
        many=False,
        queryset=user_private_tags # <-------------------------- filter by user
    )

    class Meta:
        model = DotPrivate
        fields = ('id', 'name', 'description', 'lat', 'lon', 'rating', 'link', 'tag')
        read_only_fields = ('id',)

Я полагаю, что у вас, скорее всего, будет более одного тега, поэтому вы можете установить many=True

...так есть ли способ сделать это в views.py?

Ответ - да, есть, как описано здесь в документе

class DotPrivateViewSet(viewsets.ModelViewSet):

    serializer_class = serializers.DotPrivateSerializer
    queryset = DotPrivate.objects.all()
    authentication_classes = (JWTAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        """"Return objects for the current authenticated user only"""
        queryset = self.queryset
        query_set = queryset.filter(user=self.request.user)
        return query_set

Теперь только от вас зависит, с чем идти дальше.

Вернуться на верх