Python 在django admin中获取上载文件的url

Python 在django admin中获取上载文件的url,python,django,Python,Django,我有一个应用程序,我正在使用Django的管理站点上传一个文件。我需要返回文件的url,以便其他函数可以使用它。除了我能够获得原始文件的名称而不是应用程序保存的文件之外,这个过程工作得很好。例如,如果要上载的文件名为somefile.xxx,django将其另存为somefile_1.xxx,因为服务器上已经存在somefile.xxx,我无法返回somefile_1.xxx,但我正在获取原始文件名。这是我目前的代码 管理员 def add_view(self, request, form_ur

我有一个应用程序,我正在使用Django的管理站点上传一个文件。我需要返回文件的url,以便其他函数可以使用它。除了我能够获得原始文件的名称而不是应用程序保存的文件之外,这个过程工作得很好。例如,如果要上载的文件名为somefile.xxx,django将其另存为somefile_1.xxx,因为服务器上已经存在somefile.xxx,我无法返回somefile_1.xxx,但我正在获取原始文件名。这是我目前的代码

管理员

def add_view(self, request, form_url="", extra_context=None):
        ...

        ModelForm = self.get_form(request)
        if request.method == 'POST':
            form = ModelForm(request.POST, request.FILES)
            if form.is_valid():
                url = MEDIA_URL+'files/'+request.FILES['filename'].name
                url = iri_to_uri(url)
                title = form.cleaned_data['title']
                name = request.FILES['filename'].name
                newname = os.path.splitext(request.FILES['filename'].name)[0]
                data = utils.convert(url, title, newname)
                print data

        return super(FileAdmin, self).add_view(request, form_url="", extra_context=extra_context)
解决方案:

def save_model(self, request, obj, form, change):

        ...

        obj.save()

        url = obj.video.url

        title = obj.title

        newname = str(obj.id)

        data = utils.convert(url, title, newname)
        print data

FileField有一个url函数,可以准确地检索您想要的内容


请参见存储部分下的第3点,
添加视图是预保存的,因此文件应在内存中,因此不应设置任何文件名

您需要重写
ModelAdmin.save\u model
并在调用
obj.save()
后访问该文件,以考虑django重命名文件的可能性