gpt4 book ai didi

python - 无法上传类型错误为 : expected str, 字节或 os.PathLike 对象的文件,而不是列表

转载 作者:行者123 更新时间:2023-11-28 20:32:58 27 4
gpt4 key购买 nike

我有一个 user_post.html 页面让用户上传他们的文件(gif、mp4)或图片,但是当我点击确认时我会收到错误提示 -

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

我的主项目文件夹中有一个媒体文件夹,在媒体中我有另一个名为 user_post 的文件夹。

在我的 setting.py 中:

MEDIA_URL = 'media'

MEDIA_ROOT = [os.path.join(BASE_DIR,'media')]

我是否遗漏了什么或语法错误?

谢谢!

Traceback:

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\GIAM ZENG KEAT\Desktop\cinemagraph_project\cinemagraph_social_project\post\views.py" in Post
32. posted.save()

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\base.py" in save
729. force_update=force_update, update_fields=update_fields)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\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\GIAM ZENG KEAT\Anaconda3\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\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\base.py" in _do_insert
880. using=using, raw=raw)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\manager.py" in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\query.py" in _insert
1125. return query.get_compiler(using=using).execute_sql(return_id)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
1283. for sql, params in self.as_sql():

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\sql\compiler.py" in as_sql
1236. for obj in self.query.objs

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\sql\compiler.py" in <listcomp>
1236. for obj in self.query.objs

File "C:\Users\GIAM ZENG KEAT\Anaconda3\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\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\sql\compiler.py" in pre_save_val
1185. return field.pre_save(obj, add=True)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\fields\files.py" in pre_save
287. file.save(file.name, file.file, save=False)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\db\models\fields\files.py" in save
87. self.name = self.storage.save(name, content, max_length=self.field.max_length)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\files\storage.py" in save
48. name = self.get_available_name(name, max_length=max_length)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\files\storage.py" in get_available_name
72. while self.exists(name) or (max_length and len(name) > max_length):

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\files\storage.py" in exists
308. return os.path.exists(self.path(name))

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\files\storage.py" in path
321. return safe_join(self.location, name)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\utils\functional.py" in __get__
36. res = instance.__dict__[self.name] = self.func(instance)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\site-packages\django\core\files\storage.py" in location
201. return os.path.abspath(self.base_location)

File "C:\Users\GIAM ZENG KEAT\Anaconda3\lib\ntpath.py" in abspath
542. path = os.fspath(path)

Exception Type: TypeError at /userpost/post/
Exception Value: expected str, bytes or os.PathLike object, not list

模型.py

from django.db import models
from django.contrib.auth.models import User
from django.core.validators import FileExtensionValidator
# Create your models here.

class UserPost(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
cinemagraph = models.FileField(upload_to="user_post/", validators=[FileExtensionValidator(allowed_extensions=['gif','png','jpg'])])
c_description = models.CharField(max_length=500,default='')
date_time = models.DateTimeField(auto_now=True)

def __str__(self):
# Built-in attribute of django.contrib.auth.models.User !
return self.user.username

View .py

def Post(request):
if request.method == 'POST':
form_post = UserPostForm(request.POST, request.FILES)

if form_post.is_valid():
posted = form_post.save(commit=False)
posted.user = request.user
posted.save()
return reverse('home')
else:
return HttpResponse('Posting failed')
else:
form_post = UserPostForm()
return render(request,'post/user_post.html',{'form_post':form_post})

表单.py

from django import forms
from django.forms import ModelForm
from post.models import UserPost

class UserPostForm(forms.ModelForm):

class Meta():
model = UserPost
fields= ('cinemagraph','c_description')

user_post.html

{% extends 'base.html'%}
{% load bootstrap3 %}
{% load staticfiles %}

{% block content %}
<div class="container">
<h1>Post something to our Cinemagraph</h1>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form form_post %}
<input type="submit" class="btn btn-default" value="Confirm">
</form>
</div>

{% endblock %}

最佳答案

MEDIA_ROOT 应该是一个字符串而不是一个列表。

改为

MEDIA_ROOT = os.path.join(BASE_DIR,'media')

关于python - 无法上传类型错误为 : expected str, 字节或 os.PathLike 对象的文件,而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615227/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com