python - 将文件与 FileField 关联而不创建文件副本?
问题描述
我的test.csv
文件位于MEDIA_ROOT/file
文件夹中。
我想将此文件与FileField
以下模型相关联:
class Sample(models.Model):
data = models.FileField()
但是,如果我执行以下操作:
from django.shortcuts import render
from django.http import JsonResponse
from django.conf import settings
from django.core.files import File
import os
from .models import Sample
# Create your views here.
def index(request):
path = os.path.join(settings.MEDIA_ROOT, os.path.join('file', 'test.csv'))
with File(open(path)) as f_obj:
sample = Sample()
filename = os.path.basename(f_obj.name)
sample.data.save(filename, f_obj, save=True)
return JsonResponse({
'file_url': sample.data.url,
'file_path': sample.data.path,
'action': 'Model instance saved to database',
})
该文件的副本将在 MEDIA_ROOT 目录中创建,并且该副本(而不是原始文件)将与模型相关联。
有没有办法不创建这样的副本而只是将原始文件与 FileField 相关联?
解决方案
我认为您应该能够将对象设置FileField
为现有文件,sample
如下所示:
sample = Sample()
file_path = os.path.join(settings.MEDIA_URL, 'file', 'test.csv')
sample.data.name = file_path
sample.save()
推荐阅读
- python - 我的递归函数似乎是使用原始列表而不是在 python 中创建一个新列表
- javascript - React Native - 多选将类组件转换为功能组件
- embedded - 更改函数调用的位置会中断 uart 上的通信
- php - 雄辩的 whereDate 子句使用日期值作为列
- powershell - 删除重复的数据行
- bootstrap-4 - Bootstrap Carousel循环通过活动存储图片Rails 6
- asp.net - 路由配置 - MVC
- python - httr 包有没有办法调用 OPTIONS 方法?
- c# - Unity/C#、NUnit Parallelizable 属性
- java - 在进程运行时将符号链接更新到 jar 是否安全?