我得到了这个代码,它应该根据登录的用户名创建一个文件夹,并保存他们在该文件夹中上传的文件。
我的问题是它会抛出此错误代码
预期的str,bytes或os.PathLike对象,而不是NoneType
我目前的代码:
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)
回溯:
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
答案 0 :(得分:2)
尝试将 __init__.py
文件添加到脚本文件夹中。
答案 1 :(得分:0)
在提问时,您应该发布所有相关代码。在这种情况下,您发布了一个没有任何上下文的函数,以及一个与完全不同的内容相关的回溯。
但是,我认为我们可以猜测这个函数被指定为FileField或ImageField的upload_to
参数。如果是这样,那么问题是你没有从你的函数返回任何东西来告诉Django实际上传文件的位置。您需要将文件名加入目录并返回:
return os.path.join(createfolder, filename)