将文件与FileField相关联而不创建文件副本?

时间:2019-06-06 20:45:12

标签: python django

我的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相关联?

1 个答案:

答案 0 :(得分:0)

我认为您应该能够将FileField对象的sample设置为现有文件,如下所示:

sample = Sample()
file_path = os.path.join(settings.MEDIA_URL, 'file', 'test.csv')
sample.data.name = file_path
sample.save()