Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

expected str, bytes or os.PathLike object, not NoneType

Tags:

python

django

I got this code which is supposed to create a folder based on the logged in users name and save the file they upload inside that folder.

My problem is that it throws this error code

expected str, bytes or os.PathLike object, not NoneType

My current code:

def user_directory_path(instance, filename):
    time_stamp = 'user_{0}/{1}'.format(instance.user, filename)
    createfolder = os.path.join('C:/Users/MyUser/Desktop/Project/', 'Fileuploads/', time_stamp,)
    if not os.path.exists(createfolder):
        os.makedirs(createfolder)

Traceback:

Environment:


Request Method: POST Request URL: http://127.0.0.1:8000/callgolem/

Django Version: 2.0.4 Python Version: 3.6.5 Installed Applications: ['django.contrib.admin',  'django.contrib.auth',  'django.contrib.contenttypes',  'django.contrib.sessions',  'django.contrib.messages',  'django.contrib.staticfiles',  'callgolem'] Installed Middleware: ['django.middleware.security.SecurityMiddleware',  'django.contrib.sessions.middleware.SessionMiddleware',  'django.middleware.common.CommonMiddleware',  'django.middleware.csrf.CsrfViewMiddleware',  'django.contrib.auth.middleware.AuthenticationMiddleware',  'django.contrib.messages.middleware.MessageMiddleware',  'django.middleware.clickjacking.XFrameOptionsMiddleware']





File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\wqe\Desktop\GolemProject\callgolem\views.py" in index
  65.                 instance.save()

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in save
  729.                        force_update=force_update, update_fields=update_fields)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in save_base
  759.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in _save_table
  842.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in _do_insert
  880.                                using=using, raw=raw)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\manager.py" in manager_method
  82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\query.py" in _insert
  1125.         return query.get_compiler(using=using).execute_sql(return_id)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  1283.             for sql, params in self.as_sql():

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in as_sql
  1236.                 for obj in self.query.objs

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in <listcomp>
  1236.                 for obj in self.query.objs

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in <listcomp>
  1235.                 [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in pre_save_val
  1185.         return field.pre_save(obj, add=True)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\files.py" in pre_save
  287.             file.save(file.name, file.file, save=False)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\files.py" in save
  86.         name = self.field.generate_filename(self.instance, name)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\files.py" in generate_filename
  306.         return self.storage.generate_filename(filename)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\files\storage.py" in generate_filename
  97.         dirname, filename = os.path.split(filename)

File "C:\Users\wqe\AppData\Local\Programs\Python\Python36-32\lib\ntpath.py" in split
  205.     p = os.fspath(p)

Exception Type: TypeError at /callgolem/ Exception Value: expected str, bytes or os.PathLike object, not NoneType
like image 231
Phillip Avatar asked May 29 '18 13:05

Phillip


2 Answers

Try adding the __init__.py file to the script folder.

like image 143
Ivan Avatar answered Nov 09 '22 04:11

Ivan


When asking a question, you should post all the relevant code. In this case, you've posted a function, without any context, and a traceback which appears to relate to something completely different.

However, I think we can guess that this function is assigned as the upload_to parameter of a FileField or ImageField. If so, then the problem is that you do not return anything from your function to tell Django where to actually upload the file to. You need to join the filename to your directory and return that:

return os.path.join(createfolder, filename)
like image 27
Daniel Roseman Avatar answered Nov 09 '22 02:11

Daniel Roseman