Django DRF - Как обновить поля объекта с помощью api_view?

В моем Django-приложении я управляю S3-бэкендами для импорта данных из них. Теперь я хотел бы иметь возможность обновлять определенные поля S3-бэкенда, но я не уверен, как это сделать:

Это моя текущая ситуация

views.py

@api_view(['PATCH'])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated, IsAdminUser])
def s3_backend_update(request, pk):
    """
    Updates a given S3Backend resources
    """
    if request.method == 'PATCH':
        obj = S3Backend.objects.filter(id=pk)
        s3_storage_update_serializer = S3StorageUpdateSerializer(obj, data=request.data)
        try:
            if s3_storage_update_serializer.is_valid(raise_exception=True):
                s3_storage_update_serializer.save()
                s3_storage_serializer = S3StorageSerializer(instance=s3_storage_update_serializer.instance)
                return JsonResponse(
                    {"status_code": S3Updated.status_code,
                     "default_detail": S3Updated.default_detail,
                     "default_code": S3Updated.default_code,
                     "updated_s3_backend": s3_storage_serializer.data,
                     }, status=status.HTTP_202_ACCEPTED, safe=False)
        except APIException:
            return Response(
                {"status_code": S3UpdateFailure.status_code,
                 "default_detail": S3UpdateFailure.default_detail,
                 "default_code": S3UpdateFailure.default_code,
                 "error": s3_storage_update_serializer.errors
                 },
                status=status.HTTP_406_NOT_ACCEPTABLE
            )

serializers.py

class S3StorageUpdateSerializer(serializers.ModelSerializer):
id = serializers.PrimaryKeyRelatedField(queryset=S3Backend.objects.all())

class Meta:
    model = S3Backend
    fields = ('id', 'resource_name', 'access_key', 'secret_key', 'bucket', 'endpoint', 'region', 'library')
    extra_kwargs = {'secret_key': {'write_only': True}}  # We dont want to show the secret_key

def validate(self, data):
    try:
        s3_get_resource(endpoint=data['endpoint'],
                        access_key=data['access_key'],
                        secret_key=data['secret_key'],
                        region=data['region']).meta.client.head_bucket(Bucket=data['bucket'])
    except (APIException, ClientError, EndpointConnectionError, NewConnectionError, ConnectionRefusedError) as e:
        raise ValidationError('S3 Bucket does not exist or you dont have access privileges.', e)
    return data

Мне кажется, что DRF не может обработать следующую строку:

S3StorageUpdateSerializer(obj, data=request.data)

Ошибка, которую я получаю в ответ, следующая:

AttributeError: объект 'QuerySet' не имеет атрибута 'pk'

Я новичок в API, поэтому я предполагаю, что я просто делаю что-то очень базовое неправильно.

Заранее спасибо.

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