我的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相关联?
答案 0 :(得分:0)
我认为您应该能够将FileField
对象的sample
设置为现有文件,如下所示:
sample = Sample()
file_path = os.path.join(settings.MEDIA_URL, 'file', 'test.csv')
sample.data.name = file_path
sample.save()