Использование Tempfile в качестве промежуточного хранилища перед загрузкой в модель

Мое приложение Django берет контекстный файл и преобразует его в файл pdflatex. Выходной каталог задан как f'{current_path}/media/pdf'. Все работает, как ожидалось.

rendered_file = template.render(context).encode('utf-8')
process = subprocess.Popen(
          ['pdflatex', '-output-directory', f'{current_path}/media/pdf'],
          stdin=PIPE,
          stdout=PIPE,
          )

process.communicate(rendered_file)

Проблема возникает, когда я пытаюсь запустить его на сервере Heroku. В качестве хранилища я использую AWS S3. Файл не может быть сохранен с помощью url, подобного этому. Но мне нужно использовать модель для загрузки pdf-файла.

Это модель:

class pdfUploadModel(models.Model):
    auto_increment_id = models.AutoField(primary_key=True, default=True)
    image = models.ImageField(null=True, blank=True, upload_to="pdf/")

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

Моя идея состоит в том, чтобы использовать временный каталог, который будет создан на heroku и затем снова удален. Я не знаю, правильный ли это подход, или есть более элегантное решение моей проблемы.

Это будет выглядеть примерно так:

with tempfile.NamedTemporaryFile() as name:
     rendered_file = template.render(context).encode('utf-8')
     process = subprocess.Popen(
          ['pdflatex', '-output-directory', ---tempdirectory--], #here should be the tempdirectory
          stdin=PIPE,
          stdout=PIPE,
          )

     process.communicate(rendered_file)
     
     with open(---tempdirectory---, 'rb') as f:
         data = f.read()
         pdfFile = pdfUploadModel(models.Model)
         pdfFile.image.save('pdffile.pdf', ContentFile(data))
         pdfFile.save()

Я не знаю, имеет ли смысл такой подход. Но я просто не могу придумать лучшей идеи, как решить эту проблему.

Вернуться на верх