@Vlad1987
учу Python

Как добавить к загружаемому через форму файлу ещё один сгенерированный автоматически?

Всем привет!
Следущая ситуация. У меня есть простенькая модель:

class UploadFile(models.Model):
    description = models.CharField(max_length=150, verbose_name='Введите краткое описание загружаемного файла*')
    file_to_upload = models.FileField(upload_to='uploads/%Y/%m/%d/', storage=RenameStorage)
    upload_date = models.DateTimeField(auto_now_add=True)


И есть связанная с ней форма:

class UploadFileForm(forms.ModelForm):  #связанная с моделью UploadFile форма.
    class Meta:
        model = UploadFile  #связываем форму с моделью
        fields = '__all__'


Есть представление, обрабатывающее загрузку файлов:

def upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('success')
    else:
        form = UploadFileForm()
    return render(request, 'testapp/uploadfileform.html', {'form': form})


Подскажите, пожалуйста, как сделать так, чтобы при сохранении загруженного файла, вместе с ним в папку загружался сгенерированный текстовый файл с содержанием поля description

Можно ли как-то реализовать это через переопределение какого-либо метода в классе FileSystemStorage или можно как-то проще? Не понимаю даже с какой стороны подойти к этому.

Заранее большое спасибо!

UPD. Путём не сложных махинаций я сделал так, чтобы генерировался файл. Но вот как ему указать вместо корневой папки ту папку, куда загружается основной файл, ума не приложу:(

def upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            with open(f'{form.cleaned_data["description"]}.txt', 'w+') as description:
                description.write(form.cleaned_data["description"])
            return redirect('success')
    else:
        form = UploadFileForm()
    return render(request, 'testapp/uploadfileform.html', {'form': form})
  • Вопрос задан
  • 19 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы