Django如何重命名上传的文件?

Django如何重命名上传的文件?,django,django-uploads,Django,Django Uploads,如果从web浏览器上载文件image.png,则名为image.png的新文件将显示在服务器的上载目录中 如果我随后上载另一个名为image.png(同名)的文件,则服务器上的上载目录中将出现一个名为image\u aj642zm.png的新文件 然后,如果我上载另一个名为image.png(同样是相同的名称)的文件,服务器上的上载目录中将出现一个名为image_z6z2BaQ.png的新文件 如果上载目录中已经存在同名文件,Django使用什么方法重命名上载的文件? (即额外的_aj642zm

如果从web浏览器上载文件
image.png
,则名为
image.png
的新文件将显示在服务器的上载目录中

如果我随后上载另一个名为
image.png
(同名)的文件,则服务器上的上载目录中将出现一个名为
image\u aj642zm.png
的新文件

然后,如果我上载另一个名为
image.png
(同样是相同的名称)的文件,服务器上的上载目录中将出现一个名为
image_z6z2BaQ.png
的新文件

如果上载目录中已经存在同名文件,Django使用什么方法重命名上载的文件? (即额外的
_aj642zm
_z6z2BaQ
来自哪里?)

通常的设置:

在models.py中:

from django.db import models

class Image(models.Model):
    image = models.ImageField(upload_to='uploads/')
在forms.py中:

from django import forms
from .models import Image

class ImageForm(forms.ModelForm):
    class Meta:
        model = Image
        fields = ['image']
在views.py中:

from django.shortcuts import render, redirect
from .forms import ImageForm

def upload_image(request):
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('index')
        else:
            form = ImageForm()

    return render(request, 'upload_file.html', {'form': form})

Django默认存储类方法调用

默认情况下,Django按对象的名称保存对象,但若已存在同名对象,则添加下划线和代码注释中引用的7个随机字符

此外,作为此Django存储类方法的补充,get_valid_name解析前面的文件名,并用下划线替换所有空格,并删除所有非unicode、alpha、dash、下划线或点的字符

re.sub(r'(?u)[^-\w.]', '', s)

选中模型定义中的upload_to参数。@BipulJain upload_to参数指定将上载文件放置在何处。它没有提到任何关于重命名方案的内容。也许我遗漏了什么?你可以在那里指定一个方法。应该有重命名的逻辑。请分享任何相关的代码。据我所知,Django本身并没有这样做。@Chris如果名称相同,默认情况下它会在存储类中执行此操作:)如何在生产服务器中启用此功能?出于某种原因,它没有在那里做。
re.sub(r'(?u)[^-\w.]', '', s)