Django Получить весь путь к файлу после загрузки - PullRequest
0 голосов
/ 10 ноября 2019

Я создаю свой первый проект с Django, и у меня возникли проблемы с путем к файлу. Я использую модель для хранения информации в БД и передаю некоторые поля / метаданные из представлений, например, размер, имя файла, ...

Моя проблема в том, что Django автоматически переименовывает файл, если уже естьфайл с похожим именем. Это нормально. Но я не могу найти способ, как я могу сохранить новое имя и путь к файлу в моей базе данных.

initial_obj.file.url просто дает мне "/media/filename.txt", но правильный путь:"media / userfiles / 2019/11/10 / filename_1nswmaP.txt"

views.py

def model_form_upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            initial_obj = UploadModel(file = request.FILES['file'])
            initial_obj.status = 'Übermittelt'
            initial_obj.uploaded_by = request.user.username
            initial_obj.filename = initial_obj.file.name
            initial_obj.filesize = initial_obj.file.size
            initial_obj.filepath = initial_obj.file.url
            initial_obj.save()
            return redirect('home')
    else:
        form = UploadForm()
    return render(request, 'upload/fileupload.html', {
        'form': form
    })

models.py

from django.conf import settings

class UploadModel(models.Model):
    file = models.FileField(upload_to='userfiles/%Y/%m/%d/')
    uploaded_at = models.DateTimeField(auto_now_add=True, blank=True) 
    uploaded_by =  models.CharField(max_length=255)
    status = models.CharField(max_length=255, choices = [("Fertig", "Fertig"),("Übermittelt","Übermittelt"),("In Bearbeitung","In Bearbeitung"),("Support","Support")])
    filepath = models.CharField(max_length=999)
    filename = models.CharField(max_length=255)
    filesize = models.CharField(max_length=255)

    def __str__(self):
        return self.title

1 Ответ

0 голосов
/ 11 ноября 2019

Я нашел решение сам.

Пока файл еще не сохранен, система может получить путь только из временного файла. Поэтому initial_obj.file.url должен быть сохранен в переменной после первого initial_obj.save(), а затем вы можете сохранить другое время.

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