如何将文件从模型的文件夹移动到另一个文件夹?

时间:2017-12-09 10:17:28

标签: python django file django-models django-views

我有两个模型[1] TempFile(models.Model)Company(models.Model),当调用视图[2] save_records(request)时,我想保存&移动TempFile(models.Model)中的图片/temporary_files/ 移至文件夹Company(models.Model)中的 /company_logo/

[1] models.py

class Company(models.Model):
    logo = models.FileField(upload_to="company_logo")
    ...

class TempFile(models.Model):
    unique_id = models.CharField(max_length=8)
    image = models.FileField(upload_to="temporary_files")
    ...

[2] views.py

def save_records(request):
    if request.method == 'POST':
        temp_file = TempFile.objects.get(unique_id=request.session['uuid'])

        Company.objects.create(
            logo = temp_file.image
            ...
        )

以下是此方法的问题,保存logo时文件夹的路径保持/temporary_files/。我想知道如何在没有质量损失和性能问题的情况下保存或移动图像到Company(models.Model)的{​​{1}}文件夹?

1 个答案:

答案 0 :(得分:0)

如果您使用的是文件系统存储,那么最有效的选择是将文件移动到磁盘上(参见this part of the documentation):

import os
from django.conf import settings

temp_file = TempFile.objects.get(unique_id=request.session['uuid'])

# Move the file
old_path = temp_file.image.path
filename = os.path.basename(old_path)
new_path = os.path.join(settings.MEDIA_ROOT, 'company_logo', filename)
os.rename(old_path, new_path)
temp_file.save()

Company.objects.create(
    logo = temp_file.image
)

请注意,temp_file.image的路径也发生了变化 - 假设您在保存Company对象后将删除该对象。