Получение URL загруженного файла в админке django - PullRequest
0 голосов
/ 18 января 2012

У меня есть приложение, в которое я загружаю файл, используя сайт администратора Django.Мне нужно вернуть URL-адрес файла, чтобы он мог быть использован другой функцией.Процесс работает просто отлично, за исключением того факта, что я могу получить имя исходного файла, а не файл, который сохраняется приложением.Например, если загружаемый файл называется somefile.xxx, а django сохраняет его как somefile_1.xxx, потому что файл somefile.xxx уже существует на сервере, я не могу вернуть somefile_1.xxx, но получаю исходное имя файла.это мой код на данный момент.

admin.py

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

Ответы [ 2 ]

1 голос
/ 18 января 2012

add_view предварительно сохранено - поэтому файлы должны находиться в памяти, поэтому имена файлов не должны быть установлены.

Вам нужно переопределить ModelAdmin.save_model и получить доступ к файлу после вызова obj.save(), чтобы учесть вероятность того, что django переименовал ваш файл.

0 голосов
/ 18 января 2012

FileField имеет функцию URL для получения именно того, что вы хотите, я думаю, https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.storage

См. Пункт 3 в разделе хранения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...