首页 > 解决方案 > 将文件与 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 相关联?

标签: pythondjango

解决方案


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

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

推荐阅读