Как отфильтровать набор запросов объектов 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
Теперь только от вас зависит, с чем идти дальше.