В Django Rest Api, как вернуть только те предметы, которые загрузил владелец

Список дефов Viewset выглядит следующим образом:

class ThreeDimensionalModelViewSet(viewsets.ViewSet):
    serializer_class = ThreeDimensionalModelSerializer
    queryset = ThreeDimensionalModel.objects.all()
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def list(self, request):
        models = ThreeDimensionalModel.objects.all()
        serializer = ThreeDimensionalModelSerializer(models, many=True)
        print(request.user.id)
        return Response(serializer.data)

Сериализатор выглядит следующим образом:

class ThreeDimensionalModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = ThreeDimensionalModel
        fields = ['File', 'Uploaded', 'Owner', 'Previous', 'SharedWithUser']
        read_only_fields = ['Owner']

Модель выглядит следующим образом:

class ThreeDimensionalModel(models.Model):
    File = models.FileField(upload_to='models')
    Owner = models.ForeignKey('auth.User', on_delete=models.SET_NULL, null=True, related_name='Owner')
    Uploaded = models.DateTimeField(auto_now_add=True)
    Previous = models.ForeignKey("self", on_delete=models.SET_NULL, default=None, null=True)
    SharedWithUser = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='SharedWithUser')

Когда пользователь запрашивает модели по адресу /api/models, он должен показывать только те модели, которые имеют тот же Id владельца, что и у него.

Если с запросом не отправляется никаких дополнительных данных, то очевидно, что вы не можете фильтровать по пользователю.

Прямой путь заключается в том, что для пользователей, вошедших в систему, cookie будет содержать информацию о пользователе, например userId.

Когда ваша конечная точка распознает, что пользователь, сделавший запрос, вошел в систему, она будет использовать это в качестве фильтра для запроса вместо all(), как показано в документации Django https://docs.djangoproject.com/en/3.2/topics/db/queries/#retrieving-specific-objects-with-filters

Подведем итог - если пользователь не вошел в систему (или предоставляет информацию как часть запроса каким-либо способом), то запрос является анонимным и нет способа узнать, кто его сделал

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