Связать файл с FileField, не создавая копию файла? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть файл 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 голосов
/ 07 июня 2019

Я думаю, вы должны иметь возможность установить FileField в существующий файл для sample объекта, например:

sample = Sample()
file_path = os.path.join(settings.MEDIA_URL, 'file', 'test.csv')
sample.data.name = file_path
sample.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...