You are right, these are only two options. If your object is DefaultStoragelarge, you can first save it to disk; otherwise I would use:
zipped = ZipFile(...)
zipped.writestr('archive_name', default_storage_object.read())
default_storage_object StringIO, default_storage_object.getvalue().