Используйте один и тот же загруженный файловый объект для всех экземпляров модели - PullRequest
0 голосов
/ 11 июля 2020

В моей панели администратора у меня есть отдельная страница с формой, когда при отправке я создаю Notification объекты для всех пользователей. В этой форме у меня есть поле изображения, которое я хочу прикрепить ко всем созданным Notification экземплярам.

Мы используем серверы S3 и S3BotoStorage соответственно. Моя цель - загрузить файл из формы ОДИН РАЗ, а затем привязать его ко всем объектам Notification. Проблема, которая возникает у меня в том, что файл сохранения модели загружается еще раз, что нежелательно, потому что в конечном итоге у меня будет много повторяющихся изображений на сервере mu S3.

Поле файла в моей модели Объявлено уведомление вот так:

    file = SVGImageModelField(
        verbose_name=_("icon"),
        upload_to=get_file_upload_path,
        null=True,
        validators=[ImageSizeValidator(100, 100, 500, 500, square=True)],
    )

И я обрабатываю загрузку файлов следующим образом:

        filename = form.upload_image_and_get_url()[0]  # this method uploads file via default storage
        for user in users_to_send_notification.iterator():
            notification = deepcopy(base_notification)
            file = default_storage.open(filename)
            notification.file = file
            notification.receiver = user
            notifications_to_users.append(notification)
        notifications = Notification.objects.bulk_create(notifications_to_users)

В сеансе отладчика я вижу, что модель инициализирована правильным файлом, но после сохранения другой URL.

(Pdb) notification.file
<ImageFieldFile: 9638e20f-d213-47a0-8407-392d9922fd03.jpg>
(Pdb) filename
'9638e20f-d213-47a0-8407-392d9922fd03.jpg'
(Pdb) n
> /app/curerate/apps/cures/admin_views.py(106)send_notification()
-> notifications_to_users.append(notification)
(Pdb) notification.save()
(Pdb) notification.file
<ImageFieldFile: notification/20/07/e4a1f3fad0a047cea49b58114069a8cb.jpg>

Есть ли способ предотвратить автоматическую c загрузку файла при сохранении модели?

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