django - 如何使用文件路径从 django 视图上传文件
问题描述
我必须使用本地系统的文件路径从 django 视图上传文件。我正在使用 models.create 方法来保存文件路径。但是图像没有上传到媒体目录中。
我已经尝试了 django core.utils 中的内容和文件,但它不起作用
def createevent(request):
file_path = os.path.join(settings.FILES_DIR) # Getting the directory with files
f = []
for (dirpath, dirnames, filenames) in walk(file_path):
f.extend(filenames)
break
f.remove(".DS_Store")
img = random.choice(f) # Select a random file
pa = os.path.abspath(img) # absolute file path
# pa = (img,File(pa))
response = File(pa)
print(pa)
loc = "School Ground"
if request.method == 'POST':
get_dateof = request.POST.get('dateof')
get_nameof = request.POST.get('nameof')
get_descof = request.POST.get('descof')
new_report = Event.objects.create(
name=get_nameof,
description=get_descof,
location=loc,
timeoftheevent=get_dateof,
user=request.user,
image= pa
) #creating a db record
return HttpResponse('')
我的模型.py
class Event(models.Model):
name = models.CharField(max_length=100,blank=False)
description = models.CharField(max_length=100,blank=False)
location = models.CharField(max_length=100,blank=False)
timeoftheevent = models.CharField(max_length=100,blank=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
image = models.FileField(blank=False)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.user.username
解决方案
你可以试试这个。
#This would return a path for your saved images using path name/filename you can always tweak this
def user_directory_path(instance,filename):
return '{0}/{1}'.format(instance.name, filename)
class Event(models.Model):
name = models.CharField(max_length=100,blank=False)
description = models.CharField(max_length=100,blank=False)
location = models.CharField(max_length=100,blank=False)
timeoftheevent = models.CharField(max_length=100,blank=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
image = models.FileField(upload_to = user_directory_path, blank=False)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.user.username
然后在您的views.py中,我假设myfile是您的html表单中文件字段的名称
if request.method == 'POST' and and request.FILES['myfile']:
get_dateof = request.POST.get('dateof')
get_nameof = request.POST.get('nameof')
get_descof = request.POST.get('descof')
myfile = request.FILES['myfile']
#creating a db record............
return HttpResponse('')
如果有帮助,你可以看看这篇文章
推荐阅读
- maven - 如何忽略 Element is not allowed here 错误
- vim - Vim:使用 foldmethod=expr 独立于语言回退到语法折叠
- google-sheets - 当那里还有一个不需要计算的单词时,如何从谷歌表格中计算数字
- html - 在 iframe 中打开业务对象报告
- ms-access - 是否有任何代码可以将数组中的数据传输到 MS Access 的表中
- java - Elasticsearch 2.4 jvm.options 在 MacOS Mojave 上被忽略(自制安装)
- java - 数据库被锁定在 SQLite [Java]
- javascript - 处理 .htaccess 中的内容安全策略
- c++ - 在 Windows Server 2003 中注册 dll 时出现问题
- java - 谷歌语音到文本 Java SDK 如何将语音上下文添加到语音识别配置