В моей панели администратора у меня есть отдельная страница с формой, когда при отправке я создаю 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 загрузку файла при сохранении модели?